Julia 并发编程 ---- Julia并行机制的特点和限制

问题 1:

技术文档中有这样关于Julia并发机制的描述:

2.14 并行机制。在Julia中并行执行由标准库中实现的基于消息的多处理系统提供。Julia语言设计通过提供对称协程来支持实现并发编程库,这种协程也可以看作是协同调度的线程。这种设计方式使异步通信隐藏在标准库中,而不需要用户设置回调。Julia目前不支持本机线程(Native threads),这是一个限制,也是它的一个优点,这样可以避免使用共享内存同步时带来的复杂性。

(1):Julia不支持本机线程是什么意思?什么是本机线程?

(2):其他解释语言(如Python或R)是否支持这种并行性?是否只有Julia支持这种机制?

 

来自StefanKarpinski的回答:

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

R的情况相当简单:R不是多线程的。Python稍微复杂一点:Python确实支持线程,但是由于全局解释器锁(GIL),Python代码的实际是不可能并发执行的。其他流行的开源动态语言在对本机线程的支持上,也不太一样 比如:(Ruby:no;kinda/yes?;Node.js:no),通常情况下,答案是no,它们不支持完全并发的本机线程,因此Julia并不是唯一一个这样做的。

当我们在Julia语言中添加共享内存并行机制时,无论是使用本机线程还是使用共享内存的多个进程,它都是真正的并发执行,并且不会有类似GIL的机制阻止Julia代码的同时执行。然而,把这个特点添加到一个语言也是一件棘手的事情,这也说明了为什么 不存在或有限的支持并行机制,在其他成熟的动态语言非常流行。添加共享内存并发模型在技术上是困难的,但真正的问题是设计一个编程模型,该模型将允许程序员以高效和安全的方式有效地使用硬件来并发执行程序。这一问题目前没有得到有效的解决,而且是一个非常活跃的研究和实验领域,没有“成功的标准实现”可以照搬。我们可以添加POSIX线程支持,但通常认为该编程模型是危险的,并且难以正确有效地使用。Go有一个很好的并发故事,但是它是为编写高度并发的服务器而设计的,而不是为在大数据上并发操作而设计的,所以完全不清楚简单地复制Go的模型对Julia来说是否是一个好主意。

 

问题2:

Julia使用本机线程来实现并发,或者像Python那样实现共享内存并行。

来自StefanKarpinski的回答      

是的,如果它在不同的进程中,那么我们就不再讨论线程了。目前还不清楚Julia中共享内存并行性的本质是基于线程还是基于共享内存的进程,而且这种区别在任何情况下都是实现上的细节。Python的多处理包看起来确实实现了一种多进程共享内存并行,但是它不像我希望的那样方便或自然,因为它是语言级原语。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值