Python 朱莉娅的平行性。特点和局限性

Python 朱莉娅的平行性。特点和局限性,python,multithreading,r,parallel-processing,julia,Python,Multithreading,R,Parallel Processing,Julia,《朱莉娅》的原作者在其著作中提到以下内容: 2.14并行性。 并行执行由标准库中的Julia中实现的基于消息的多处理系统提供。 语言设计支持通过 提供对称的协程,这也可以被认为是 协作调度的线程。此功能允许异步 将通信隐藏在库中,而不是要求 用户设置回调Julia当前不支持本机 线程,这是一个限制,但具有避免 同步使用共享内存的复杂性。 他们说Julia不支持本机线程是什么意思?什么是本机线程 其他解释语言,如Python或R是否支持这种并行性?Julia一个人在这里吗?“本机线程”是独立的执行

《朱莉娅》的原作者在其著作中提到以下内容:

2.14并行性
。 并行执行由标准库中的Julia中实现的基于消息的多处理系统提供。 语言设计支持通过 提供对称的协程,这也可以被认为是 协作调度的线程。此功能允许异步 将通信隐藏在库中,而不是要求 用户设置回调Julia当前不支持本机 线程,这是一个限制,但具有避免 同步使用共享内存的复杂性。

他们说Julia不支持本机线程是什么意思?什么是本机线程

其他解释语言,如PythonR是否支持这种并行性?Julia一个人在这里吗?

“本机线程”是独立的执行上下文,由操作系统内核管理,访问共享内存空间,并可能在独立的内核上并发执行。将此与单独的进程进行比较,这些进程可以在多个内核上并发执行,但具有单独的内存空间。确保进程之间的良好交互很容易,因为它们只能通过内核相互通信。确保线程不会以不可预知的、有缺陷的方式进行交互是非常困难的,因为它们可以不受限制地读写相同的内存

R的情况相当简单:。Python稍微复杂一点:Python确实支持线程,但由于存在错误,不可能实际并发执行Python代码。其他流行的开源动态语言在本机线程方面处于各种混合状态(Ruby:;Node.js:),但一般来说,答案是否定的,它们不支持完全并发的本机线程,因此Julia不是唯一一个这样做的


当我们向Julia添加共享内存并行性时,无论是使用本机线程还是使用共享内存的多个进程,都将是真正的并发,并且不会有GIL阻止Julia代码的同时执行。然而,要添加到语言中,这是一个非常棘手的特性,其他非常流行、成熟的动态语言中不存在或支持有限就是明证。添加共享内存并发模型在技术上是困难的,但真正的问题是设计一个编程模型,使程序员能够以高效和安全的方式有效地利用硬件并发。这个问题通常没有得到解决,是一个非常活跃的研究和实验领域——没有“黄金标准”可以复制。我们可以只添加POSIX线程支持,但这种编程模型通常被认为是危险的,并且难以正确有效地使用。Go有一个优秀的并发故事,但它是为编写高度并发的服务器而设计的,而不是为并发地操作大数据而设计的,因此对于Julia来说,简单地复制Go的模型是否是一个好主意还不清楚。

谢谢。当您说使用Python
“不可能实际并发执行Python代码”
时,您的意思是在同一进程内,对吗?据我所知,Python已经通过多处理包使用子进程支持共享内存并行。换句话说,当您说“当我们添加[…]时,它将是真正的并发,并且不会有GIL阻止Julia代码的同时执行。”,您指的是Julia使用本机线程执行此操作的场景,否则Julia将像Python一样实现共享内存并行。对吗?是的,如果它在不同的进程中,那么我们就不再讨论线程了。目前还不清楚Julia中共享内存并行性的本质是否基于共享内存的线程或进程,这种区别在任何情况下都是实现细节的一部分。Python的多处理程序包似乎确实实现了一种形式的多进程共享内存并行,但它不像我希望的语言级原语那样方便或自然。我还应该指出,类似Python的多处理程序包的实验工作已经完成:。谢谢。出于某种原因,最后一个链接似乎不起作用。线程的标题是什么?JPython没有GIL,并且比CPython更好地支持并发。铁蟒也是。