Java并发之actor模型
Actor模型是一个概念模型,用于处理并发计算。它定义了一系列系统组件应该如何动作和交互的通用规则。
线程-对象模型的问题
锁和效率
OOP的核心特性是封装,封装规定对象的内部数据不能直接从外部访问,它只能通过调用一组方法来修改。当我们分析OOP运行时行为时,我们有时会绘制一个消息序列图,显示方法调用的交互。例如:
很显然,对应单线程来说,程序就像串行一样执行,下面考虑多线程情况:
显然,在一个执行部分中,两个线程进入相同的方法。对象的封装模型并不保证该部分中的线程安全,解决此问题的常用方法是围绕这些方法添加锁定,确保了在任何给定时间最多只有一个线程将进入该方法,但这显然是一个非常昂贵的策略:
锁严重限制了并发性,在现代CPU架构上开销巨大。
调用者线程现在被阻塞,无法执行任何其他工作。
Locks引入了一个新的威胁:死锁。
这些现实导致了一个两难的局面:
没有足够的锁,状态就会被破坏。