python - 朱莉娅的并行性。功能和限制

Julia最初的作者在他们的文章中提到了以下内容:
2.14 Parallelism
并行执行由标准库中Julia实现的基于消息的多处理系统提供。
语言设计支持通过
提供对称协程,也可以认为是
协同调度的线程。此功能允许异步
通信应隐藏在图书馆内,而不是要求
用户设置回调。Julia目前不支持Native
线程,这是一个限制,但具有避免
共享内存同步使用的复杂性。
他们说Julia不支持本机线程是什么意思?什么是本机线程?
其他解释语言(如python或r)是否支持这种并行性?茱莉亚一个人在里面吗?


最佳答案:

“本机线程”是单独的执行上下文,由操作系统内核管理,访问共享内存空间,并可能在单独的核心上并发执行。将其与单独的进程进行比较,后者可以在多个内核上并发执行,但具有单独的内存空间。确保进程能够很好地交互是很容易的,因为它们只能通过内核进行通信。确保线程不会以不可预知的、有缺陷的方式进行交互是非常困难的,因为它们可以以不受限制的方式读写同一内存。
R情况相当简单:R is not multithreaded。python有点复杂:python确实支持线程,但是由于global interpreter lock (GIL),不可能实际同时执行python代码。其他流行的开放源码动态语言在原生线程方面处于各种混合状态(ruby:no/kinda/yes?;node.js:no),但一般来说,答案是否定的,它们不支持完全并发的原生线程,因此Julia并不是唯一一个这样的人。
当我们向Julia添加共享内存并行性时,无论是使用本机线程还是使用共享内存的多个进程,这都将是真正的并发性,并且不会有GIL阻止同时执行Julia代码。然而,这是一个非常复杂的特性,可以添加到一种语言中,这一点在其他非常流行、成熟的动态语言中得到了不存在或有限的支持。添加共享内存并发模型在技术上是困难的,但真正的问题是设计一个编程模型,使程序员能够以高效和安全的方式有效地利用硬件并发。这个问题通常没有得到解决,是一个非常活跃的研究和实验领域——没有“黄金标准”可以复制。我们可以只添加POSIX线程支持,但是这种编程模型一般被认为是危险的,并且难以正确有效地使用。Go有一个优秀的并发性故事,但是它是为编写高度并发的服务器而设计的,而不是为在大数据上并发操作而设计的,所以对于Julia来说,简单地复制Go的模型一点也不清楚。