16.5 消息并发传递

728 篇文章 1 订阅
38 篇文章 0 订阅
 

16.5 消息并发传递

 

    当我们在第 14 章中讨论开发并发程序时,关注的技术是避免使用可变状态。没有可变状态,就可以并行地运行一个计算的几个部分,因为它们不会彼此干扰。这在许多能够以函数方式实现的数据处理问题时,工作地非常好,但在处理需要更频繁地交换信息时,也有问题。

    最广为人知的解决方案是,使用共享内存(shared memory)和通过锁定保护访问共享的状态。用这种技术的问题在于,正确使用锁定是相当困难的。必须确保所有的共享内存都是正确锁定(以避免争用条件(race conditions),当多个线程写入相同的位置时)。另一个困难是,当获得锁时,不小心就可能引起死锁(deadlock),两个线程永远被阻塞,每个进程都等待对方完成。

    在 F# 中,MailboxProcessor<'Msg> 类型可用于实现并行编程,使用一种被称为消息传递并发性(message passing concurrency)的技术。这种方法并未广泛应用,但在一种函数式语言 Erlang [Armstrong et al., 1996] 中,是并发性的基础,以其可扩展性而闻名。当我们在绘制矩形的应用程序中,把状态保存到邮箱时,已经看到过这种方法,但那种情况是为了探索异步逻辑和事件处理而设计的,并不是真实的并发性。

    在这一节中,我们将看使用多个线程中的邮箱处理器,来演示这种做法。我们将使用的示例,有一个邮箱处理器和多个访问它的异步工作流(运行在多个线程上)。使用消息传递并发性更复杂的程序,经常使用多个彼此通信的邮箱处理器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值