57. 消息传递让并发系统有更好的可扩展性

消息传递让并发系统有更好的可扩展性

        程序们在他们学习计算机的一开始就被教导:并发,特别是并行(并发的一个特殊子集),是非常困难的,只有少数很优秀的人才能正确处理,而且即使这些很优秀的人也可能会在上面犯错。对于线程、信号量、监视器以及线程安全地并发访问变量的困难,一直受到关注。
        的确,这里有很多困难的问题,要解决起来很不容易。但问题的根源是什么呢?共享的存储。几乎所有随着冷战我们的关于并发的问题都有共享的可变存储的使用有关:竞争条件,死锁,活锁,等等。答案看起来很明显:要么放弃并发,要么规避共享存储。
        放弃并发几乎肯定不是个选择。计算机的核几乎是以季度时间在增加,所以利用真正的并行也变得非常重要。我们不再依赖于处理器时钟频率的增加来改进应用程序的性能,仅依靠开发并行就会改善程序性能。很明显,不改进性能是一个选择,但用户不太可能会接受吧。
        那么我们能够规避共享的存储吗?肯定可以。
        我们可以使用进程和消息传递来代替线程和共享内存作为编程模型。这里的“进程”仅仅指一个受保护的有着可执行代码的独立状态,不一定需要是一个操作系统的线程。Erlang(及它之前的occam)已显示了进程对于编写并发和并行的系统是非常成功的机制。这些系统没有共享内存、多线程系统的所有同步压力。并且,已经有了一个正式的模型,通信顺序进程(CSP),可以用于这种系统的引擎的一部分。
        我们可以更进一步,引入数据流系统作为计算的方式。数据流系统中没有显式的程序控制流。建立一个由数据路径连接的操作符的有向图,并把数据填入系统,系统里的数据的准备度控制评估。必然没有几步问题。
        说了这些,C、C++、Java、Python和Groovy这些语言是系统系统开发的主要语言,这些语言表现给程序员的是开发共享存储、多线程系统的语言。可以做什么呢?答案是使用,没有的话就创造,提供进程和消息传递模型的库和框架,避免使用共享的可变存储。
        总之,不在编程中使用共享存储,而是用消息传递取而代之,可能是最成功的实现受益于现在硬件中流行的并行的系统的方法。也许你会觉得奇怪,作为并发的单位,尽管进程早于线程,未来却似乎是使用线程实现进程。

原文:Message Passing Leads to Better Scalability in Parallel Systems by Russel Winder

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值