cooperative multitasking 和 preemptive multitasking


前言

Python 的并发编程中,主要使用 2 种多任务机制:cooperative multitasking 和 preemptive multitasking。协程并发用到 cooperative multitasking,而多线程和多进程则用到 preemptive multitasking。


1. cooperative multitasking

cooperative multitasking 是在并发程序中,一种协同合作的并发方式。通俗地说是“商量好的”。
例如在多协程并发时,下面这段代码中,await bar() 就明确表示把 CPU 控制权交给 bar,让协程 bar 开始运行。这是一种“商量”的方式。

import asyncio 

async def foo():
	...
	await bar()

Luciano Ramalho 在《Fluent Python》中,对 cooperative multitasking 的解释如下:

Cooperative multitasking:
each coroutine must explicitly cede control with the yield or await keyword, so that another may proceed concurrently.

2. preemptive multitasking

相反的,preemptive multitasking 则是“强制中断”的方式,通俗地说是“没得商量”。
多线程 thread 并发时,每隔 5ms,解释器会把正在运行的线程强制中断,然后 OS scheduler 会把 GIL 分配给下一个线程,也就是把解释器分配给下一个线程使用。这种方式不受线程本身控制,所以说是一种“没得商量”的方式。
在多进程 process 并发时,也存在这种情况。比如在一个处理器 processor 中,启动了多个进程。此时多个进程需要对处理器进行争夺,就会用到 preemptive multitasking。

Luciano Ramalho 对 preemptive multitasking 的解释是:

Preemptive multitasking:
The OS scheduler preempts—i.e., suspends—each running process periodically to allow other processes to run.

Preemptive 是动词 preempt 加上后缀 -ive 得到的形容词。Preempt 是一个多义词,上面将它解释为 suspend,就是 “挂起”、“中断” 的意思。


——————本文结束——————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值