CPU架构的景观发生了变化,多个核心的是一种趋势即将改变我们需要开发的软件。我已经做了多线程的发展C、C++、Java,我已经做了多处理发展利用各种IPC机制。传统方法的使用线似乎并不很容易,对开发人员使用硬件,支持一个高度发。

什么样的语言、图书馆和开发技术是你知道的,有助于减轻传统的挑战的创建并发的应用程序?我显然的思想等问题的僵局和竞争条件。设计技术、图书馆、工具,等等。也是有趣的是,帮助采取实际的优势和确保可用资源的使用-只要写一个安全的、稳健的螺纹应用程序不能确保它的使用所有可用的核心。

什么我到目前为止看到的是:

  • 二郎:进程的基础、消息传递IPC,'演员的模型的并发
  • 剧中:演员的模型图书馆用红宝石和蟒蛇
  • 斯卡拉:功能编程语言JVM与一些加入支持并发
  • :功能编程语言JVM有行为者的图书馆
  • 白蚁:一口朗的处理办法和消息传递方案

还有什么你知道么,有什么为你工作,你认为什么是有趣的看?

有帮助吗?

解决方案

我建议两个范式的变化:

软件事务存储器

你可能想看看这一概念的 软件事务存储器 (STM)。想法是使用 乐观的并发:任何操作运行的并行对他人的尝试来完成它的工作在一个孤立的事务;如果在某些时候的另一事务已经承诺,使数据在其此交易的工作,该事务的工作被扔掉和交易再次运行。

我认为第一个被广泛知执行的想法(如果不的概念证明和第一一)是一个在Haskell: 文件和介绍有关事务的存在Haskell.许多其它实现上列出 维基百科的STM的文章.

事件循环和承诺

另一个非常不同的方式处理并发是实现在[E编程语言](http://en.wikipedia.org/wiki/E_(programming_language%29).

注意,其方式处理并发,以及其他部分的语言设计的,是大量基于男演员的模式。

其他提示

你提到过Java,但你只说的螺纹。你看过Java的并发图书馆?它捆绑在Java5和以上。

这是一个非常好的图书馆包含ThreadPools,CopyOnWriteCollections到非常少。检查了文档 Java教程.或如果你愿意, Java文档.

我用 处理 为蟒蛇。它模拟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线、演员的模式,等等)并把一些链接的一天:

http://concurrency.tumblr.com

我一直在做的并发的编程在Ada的将近20年了。

语言本身(而不是一些上涨库)支持线("任务")、多个调度模式,以及多个同步的范例。你甚至可以建立自己的同步方案使用的建立在原语。

你可以认为阿达的 会合 作为排序的程序性为导向的同步设施,同时 受保护的对象 更面向对象的。聚会类似的老CS-的概念 监视器, 但更强大。受保护的对象是特殊类型的同步元,让你造的东西完全一样OS锁、信号灯的事件,等等。然而,它是足够强大,你也可以发明和创造自己的种同步的对象,这取决于你的确切需求。

这个问题 什么并行编程模型做你建议在今天,以利用的众核处理器的明天? 已经被要求。我给了以下答复。

Kamaelia 是一个 蟒蛇框架 对于建筑应用中有很多相通的进程。

Kamaelia并发了有用的,有趣的

在Kamaelia你建立系统 简单的部件,以彼此交谈.这种速度发展,大规模艾滋病的维持和也意味着你 建立自然的并发软件.它的目的可以访问 任何 开发,包括新手。这也使得它的乐趣:)

什么样的系统?网络服务器,客户的桌面应用程序,查看基础的游戏,代码转换系统和管道方面,数字电视系统、垃圾邮件eradicators、教学工具,以及一个公平的量更:)

这里有一个视频从Pycon2009年。它开始通过比较Kamaelia到扭曲和平行蟒蛇然后给出一个手放在示范Kamaelia.

容易并发Kamaelia-第1部分 (59:08)
容易并发Kamaelia-第2部分 (18:15)

我密切关注 并行扩展。净平行的皇宫.

我知道的 区域环境影响评价 -一语言是基于二郎,但看起来更像是蟒蛇/红宝石。

.

它处理线对于你所以你只关心它的部分C++应用程序并行运行。

例如。

#pragma omp parallel for
for (int i=0; i < SIZE; i++) 
{
// do something with an element
}

上述代码将运行为循环上的许多线程的因为你已经告诉于运行时使用,因此,如果大小为100,并且你有一个四核箱,对于循环将运行25个项目在每一个的核心。

还有一些其他平行的扩展对于各种语言,但我最感兴趣的是那个运行你的绘图卡片。那是真实的并行处理:)(实例: GPU++libSh)

C++0x将提供 std::lock 功能用于锁定超过一个互斥在一起。这将有助于缓和的僵局,由于开了锁。此外,C++0x线图书馆将有承诺、期货和包装的任务,其中允许一个线程,以等待结果的执行的操作上的另外一个线程没有任何用户一级锁。

multiprocessing 是蟒蛇库,简化了多的核心节目,作为mentionned在另一个答案。

写程序与蟒蛇的 multiprocessing 可以很容易地进行修改的船舶上工作的云,而不是当地的核心。 piCloud 利用,以提供较大,需求的处理能力上的云:你只需要修改的2行的代码。

因此,这里是外:当选择一个图书馆为多核心,人们可能要问,是否一个云办法也将是有意义的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top