Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Racket支持多线程吗?_Multithreading_Racket - Fatal编程技术网

Multithreading Racket支持多线程吗?

Multithreading Racket支持多线程吗?,multithreading,racket,Multithreading,Racket,我想在Racket中编写一个多线程程序,它实际上利用了多个进程和共享内存空间,就像C中的pthread一样。Racket提供了“线程”,但它只使用一个进程来执行多个线程。它还通过在多个进程上运行的命令行提供执行新程序的“子进程”,但这些程序不能共享相同的内存空间。不要这样做 Racket确实提供了共享内存空间,但它们不提供(不受限制的)共享内存空间。如果要将数据从一个线程发送到另一个线程,请使用place通道 正如格雷格·亨德肖特(Greg Hendershott)所指出的,您可以通过place

我想在Racket中编写一个多线程程序,它实际上利用了多个进程和共享内存空间,就像C中的pthread一样。Racket提供了“线程”,但它只使用一个进程来执行多个线程。它还通过在多个进程上运行的命令行提供执行新程序的“子进程”,但这些程序不能共享相同的内存空间。

不要这样做

Racket确实提供了共享内存空间,但它们不提供(不受限制的)共享内存空间。如果要将数据从一个线程发送到另一个线程,请使用place通道

正如格雷格·亨德肖特(Greg Hendershott)所指出的,您可以通过place频道发送共享向量,该频道提供了一个共享空间供您使用。(但这与共享所有内存引用不同,这是熟悉Java风格线程的人所期望的。后者是我的“不要那样做”所指的。)


如果你真的想像线程一样使用pthread,那么你就不会再使用Racket了

虽然我没有亲自尝试过,但看起来球拍场所可以使用。@GregHendershott是的,但它比pthreads提供的形式限制得多,而pthreads正是OP所要求的(他们是否真的需要它,是另一回事;XY问题等等)。是的。我只是想指出,您可以通过通道发送的一个东西是共享内存对象。好主意吗?通常不会。如果你真的需要,有用吗?对“我同意你的问题。”格雷根德肖特说得对。但是,除了共享向量之外,您通常不能通过网络发送可变对象。(您可以发送字符串、向量和哈希表,但它们将在另一端转换为不可变版本。)这与Java风格的内存共享截然不同,Racket不支持这种共享(我认为这是有充分理由的,因为它可能很危险)。现在让我们假设我可以使用通信通道。在Racket中使用多个线程似乎是时间多路复用,而不是实际使用多个进程。当我执行多个线程时,我只看到一个内核在运行。有没有办法使用多核?