操作系统:协程和上下文切换

本文探讨了程序执行的线程模型,重点介绍了同步执行序和异步执行序,并深入解析了协程的基本原理及其优缺点。通过对比上下文切换的不同类型,阐述了上下文切换对性能的影响,并提供了监控上下文切换的工具和建议,以减少不必要的性能损失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我们明确一个观点:程序的用线程来执行的。

同步执行序

如上图用户线程执行的一段时间片,线程从起点 A 开始执行,执行用户代码到终点 B 结束,执行到 C 点需要执行系统调用,用户线程就会在 C 点阻塞,执行序进入系统内核状态,剩下的时间片在系统内核执行。

执行系统调用是操作系统内核的异步调用,系统内核的时间片是由操作系统提供的内部时间片。系统调用不使用剩下的时间片,在用户线程阻塞,剩下的用户线程的时间片被阻塞造成浪费,根据阻塞的方式有两种处理时间片流程,一种方式阻塞什么都不干,一种方式是向操作系统交还剩下时间片给其他程序或者线程执行,但是这两种方式对进程执行都会造成性能损失。

异步执行序

还有一种模式,当线程执行到 C 点执行系统调用被阻塞,异步执行系统调用,剩下来的时间片不交还,执行调度把这段时间片交给其他线程执行。当系统调用完成后利用selectepoll机制实现线程唤醒,唤醒后把系统调用结果返还线程。这样在同一个线程执行多个并发任务,这些并发任务在用户态完成,和操作系统无关。

例如调用open系统调用,重新实现openAsyn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值