假设某单位有一名局长,5个副局长,但是公车只有两辆奥迪,请问这个单位该聘用几名司机?
如果你认为应该有6个司机,每位领导配一个,出去倍有面子!你这就是传统多线程的思维方式,看似有面子,问题是会被懂得内幕的笑话的:你们单位就两辆车,还招这么多司机干嘛?光图个面子?双核的条件下起6个线程,光从效率上讲,还有实际意义吗?多个司机得一哄而上抢车了吧?顶多局长的司机优先级高一点,但是无论如何抢到车子的司机还要记得拿好车钥匙,防止被别人抢走。
事实上,一般这种情况下都是招两个司机,每个司机开一辆车,为6个领导服务,司机与车子绑定,而不是和领导绑定,这就是协程了。这样司机不用动不动换车子,在车子的保养、爱惜度、熟练度方面会越来越好,但是协程也有缺点,为啥?领导的主动权降低了,永远只有司机最清楚当前的车子调度情况,时间长了,众多领导们感觉被两个司机耍着团团转了,这就是协程需要用户态自己去调度的原因。
奥迪 = CPU核
司机 = 负责执行协程的两个线程
局长、副局长 = 被执行的协程