您知道哪些语言、库和开发技术可以帮助缓解创建并发应用程序的传统挑战?我显然在考虑像死锁和竞态条件这样的问题。设计技术、库、工具等也很有趣,可以帮助实际利用和确保可用资源被利用 - 只编写一个安全、强大的线程应用程序并不能确保它使用所有可用的核心。
我所看到的是: 您还知道什么,对您有用的是什么,您认为值得关注的是什么?
我建议两种范式转变:
您可能想了解一下软件事务内存(STM)的概念。其思想是使用乐观并发:运行在并行状态下的任何操作都会尝试在隔离的事务中完成其工作;如果另一个事务在某个时刻已提交,且无效ates此事务正在处理的数据,则该事务的工作将被放弃,并重新运行该事务。
我认为第一个广为人知的实现(如果不算概念验证和第一个实现),是Haskell中的一个实现:有关Haskell中事务内存的论文和演示文稿。许多其他实现都列在Wikipedia的STM文章中。
另一种处理并发的非常不同的方式是在[E编程语言] (http://en.wikipedia.org/wiki/E_(programming_language%29))中实现的。
请注意,它处理并发的方式以及语言设计的其他部分,都严重依赖于Actor模型。
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()
,在Windows上必须模拟。对象通过pickle
/unpickle
传输,因此您必须确保其正常工作。已经获取资源的进程进行分叉可能不是您想要的(考虑数据库连接),但总体上它可以正常工作。它的表现非常出色,以至于它已经被添加到Python 2.6的快速通道中(参见PEP-317)。
multiprocessing
模块。 - Constantin我认为Intel的Threading Building Blocks对于C++来说非常有趣。相比于原始线程,它提供了更高层次的抽象。如果你喜欢纸质文档,O'Reilly出版社有一本非常好的书籍。另外,也可以查看Any experiences with Intel’s Threading Building Blocks?。