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

时间:2013-05-07 13:50:33

标签: python multithreading r parallel-processing julia

在他们的arXiv paper中,朱莉娅的原作者提到了以下内容:

  

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

说Julia不支持原生线程,这是什么意思?什么是本机线程?

Python R 等其他解释语言是否支持此类并行?朱莉娅独自在这吗?

1 个答案:

答案 0 :(得分:67)

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

R情况相当简单:R is not multithreaded。 Python有点复杂:Python确实支持线程,但由于global interpreter lock (GIL),Python代码的实际并发执行是不可能的。其他流行的开源动态语言在本机线程方面处于各种混合状态(Ruby:no/kinda/yes?; Node.js:no),但一般来说,答案是否定的,它们并不完全支持并发本机线程,所以Julia并不孤单。

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