多核心和并行语言、图书馆和开发技术,[封闭]
-
02-07-2019 - |
题
CPU架构的景观发生了变化,多个核心的是一种趋势即将改变我们需要开发的软件。我已经做了多线程的发展C、C++、Java,我已经做了多处理发展利用各种IPC机制。传统方法的使用线似乎并不很容易,对开发人员使用硬件,支持一个高度发。
什么样的语言、图书馆和开发技术是你知道的,有助于减轻传统的挑战的创建并发的应用程序?我显然的思想等问题的僵局和竞争条件。设计技术、图书馆、工具,等等。也是有趣的是,帮助采取实际的优势和确保可用资源的使用-只要写一个安全的、稳健的螺纹应用程序不能确保它的使用所有可用的核心。
什么我到目前为止看到的是:
- 二郎:进程的基础、消息传递IPC,'演员的模型的并发
- 剧中:演员的模型图书馆用红宝石和蟒蛇
- 斯卡拉:功能编程语言JVM与一些加入支持并发
- 题:功能编程语言JVM有行为者的图书馆
- 白蚁:一口朗的处理办法和消息传递方案
还有什么你知道么,有什么为你工作,你认为什么是有趣的看?
解决方案
我建议两个范式的变化:
软件事务存储器
你可能想看看这一概念的 软件事务存储器 (STM)。想法是使用 乐观的并发:任何操作运行的并行对他人的尝试来完成它的工作在一个孤立的事务;如果在某些时候的另一事务已经承诺,使数据在其此交易的工作,该事务的工作被扔掉和交易再次运行。
我认为第一个被广泛知执行的想法(如果不的概念证明和第一一)是一个在Haskell: 文件和介绍有关事务的存在Haskell.许多其它实现上列出 维基百科的STM的文章.
事件循环和承诺
另一个非常不同的方式处理并发是实现在[E编程语言](http://en.wikipedia.org/wiki/E_(programming_language%29).
注意,其方式处理并发,以及其他部分的语言设计的,是大量基于男演员的模式。
其他提示
我用 处理 为蟒蛇。它模拟API的 螺纹 模块并因而很容易使用。
如果你使用 map/imap
或者发电机/清单的理解,把你的代码可以使用 processing
是直截了当的:
def do_something(x):
return x**(x*x)
results = [do_something(n) for n in range(10000)]
可以并行与
import processing
pool = processing.Pool(processing.cpuCount())
results = pool.map(do_something, range(10000))
这将使用,但是许多处理你有计算出的结果。还有懒(Pool.imap
)和异步变(Pool.map_async
).
有一个队列类实现 Queue.Queue
, 和工作人员类似的螺纹。
陷阱
processing
是基于 fork()
, ,它必须仿效。目的是转移过 pickle
/unpickle
, 所以你必须确保这一工作。振的进程已经获得的资源已经不可能你想要什么(认为数据库连接),但在一般情况下它的工作。它的工作,它已经加入到蟒蛇2.6在快速轨道上(cf。 PEP-317).
英特尔的 穿建设块 C++看起来很有趣我。它提供了一个更高的水平抽象比原螺纹。O'Reilly有一个非常 不错的书 如果你喜欢的死树的文件。看,此外, 任何经验与英特尔的线程构建模块?.
我会说:
模型:线+共享的国家、演员+消息传递、交易存储器、地图/减少?语言:二郎,Io,卡拉,题,区域环境影响评价 图书馆:Retlang,Jetlang,Kilim,Cilk++、叉/加入,MPI,Kamaelia,赤
我保持一个并发的链接有关的博客这样的东西,(二郎,斯卡拉、Java线、演员的模式,等等)并把一些链接的一天:
这个问题 什么并行编程模型做你建议在今天,以利用的众核处理器的明天? 已经被要求。我给了以下答复。
Kamaelia 是一个 蟒蛇框架 对于建筑应用中有很多相通的进程。
这里有一个视频从Pycon2009年。它开始通过比较Kamaelia到扭曲和平行蟒蛇然后给出一个手放在示范Kamaelia.Kamaelia并发了有用的,有趣的
在Kamaelia你建立系统 简单的部件,以彼此交谈.这种速度发展,大规模艾滋病的维持和也意味着你 建立自然的并发软件.它的目的可以访问 任何 开发,包括新手。这也使得它的乐趣:)
什么样的系统?网络服务器,客户的桌面应用程序,查看基础的游戏,代码转换系统和管道方面,数字电视系统、垃圾邮件eradicators、教学工具,以及一个公平的量更:)
容易并发Kamaelia-第1部分 (59:08)
容易并发Kamaelia-第2部分 (18:15)
我知道的 区域环境影响评价 -一语言是基于二郎,但看起来更像是蟒蛇/红宝石。
这个问题是密切相关,如果不重复, 什么并行编程模型做你建议在今天,以利用的众核处理器的明天?
Java有行为者的图书馆你也知道.你知不知道J阿瓦是一个功能性的语言? ;)
C++0x将提供 std::lock
功能用于锁定超过一个互斥在一起。这将有助于缓和的僵局,由于开了锁。此外,C++0x线图书馆将有承诺、期货和包装的任务,其中允许一个线程,以等待结果的执行的操作上的另外一个线程没有任何用户一级锁。
multiprocessing
是蟒蛇库,简化了多的核心节目,作为mentionned在另一个答案。
写程序与蟒蛇的 multiprocessing
可以很容易地进行修改的船舶上工作的云,而不是当地的核心。 piCloud 利用,以提供较大,需求的处理能力上的云:你只需要修改的2行的代码。
因此,这里是外:当选择一个图书馆为多核心,人们可能要问,是否一个云办法也将是有意义的。