操作系统导论第33章——基于事件的并发

本文探讨了事件驱动编程的概念,通过while循环不断获取并处理事件,强调了非阻塞IO和异步操作的重要性。介绍了select和poll方法用于检查IO描述符,以及异步IO如何允许程序在IO操作完成前恢复执行。同时,指出了基于事件的并发编码复杂性及在多CPU系统和特定系统活动中的挑战。
摘要由CSDN通过智能技术生成

1. 基本含义

while (1) {
    events = getEvents()
    for (e in events) {
        processEvent(e);
    }
}

对调度的显式控制来代替多线程,也就是说运行processEvent(e)时系统只运行该活动。

2. 如何实现

select()或者poll()

select()检查IO描述符集合,返回就绪描述符的总数

阻塞与非阻塞:阻塞接口在返回给调用者之前完成所有工作;非阻塞接口开始一些工作,但立即返回,从而让所有需要完成的工作都在后台完成 

注意:不要阻塞基于事件的服务器

3. 异步IO

普通IO操作会阻塞,为了基于事件的并发正常工作,提出了异步IO

这些接口使应用程序能够发出IO请求,并在IO完成之前立即将控制权返回给调用者;另外的接口让应用程序能够确定各种IO是否完成。

进一步:可以使用信号的机制,消除重复循环系统的需要

4. 缺点

基于事件的并发编码比基于多线程的并发复杂:当事件处理程序发出异步IO请求时,它必须打包一些程序状态,以便下一个事件处理程序在IO最终完成时调用,“手工栈管理”

当系统从单CPU切换到多CPU时,基于事件的简单性将消失

不能与某些类型的系统活动集成,比如分页(隐式阻塞)

随着时间推移,基于事件的代码难以管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值