1.9 KiB
1.9 KiB
进程与同步:协作执行的对象
原书依据:第 13 章,印刷页 91–95,PDF 页 102–106。
原书的 Process 是 Smalltalk 镜像中的执行活动。不能把这个名字直接解释为操作系统进程,也不能据此推断多核并行。
四类对象的分工
| 类 | 作用 |
|---|---|
Process |
表示可恢复、可挂起的执行活动 |
ProcessorScheduler |
按调度策略管理执行活动 |
Delay |
表示一定时间的等待 |
Semaphore |
协调活动之间的等待与信号 |
块可以作为执行活动的计算内容。是否立即运行、以什么优先级运行,要看创建和启动协议;不要把“创建 Process”和“已经执行完成”混为一谈。
等待不是空转
Delay 表达经过一段时间后再继续。Semaphore 的 wait 与 signal 表达同步关系。等待活动暂停后,其他可运行活动可以继续推进;反复检查共享变量的循环则可能消耗执行时间。
消费者:等待信号 → 检查共享状态 → 取出结果
生产者:准备结果 → 更新共享状态 → 发出信号
这是一张概念顺序图,不是可直接运行的队列实现。仅有信号量不代表共享集合访问自动安全,还要定义互斥、空队列、重复信号和退出条件。
阅读调度代码的顺序
先找创建与启动位置,再找可能挂起的位置,最后沿恢复路径检查共享状态。重点记录“此处继续执行时,其他活动可能改过什么”。原书的优先级说明属于该系统调度模型,不是跨实现的性能保证。
思考题
如果发送信号后才写入结果,消费者恢复时能否看见完整状态?这取决于调度与同步保证;设计时应先完成状态转换,再通过约定的同步协议通知。研究时也要核对目标 VM 的具体行为。本教程未运行并发或调度测试。