【 在 txgx 的大作中提到: 】
: corouting 不能在两个线程上吧?,你举个例子。
: 发自「今日水木 on HUAWEI G750-T01」
可以运行在很多线程上。控制比较复杂。
我就写过多线程协程。
一个协程,当进行一次异步IO调用,返回时,可能与调用的不是一个线程。
同样,一个线程,有时为这个协程服务,有时为另一个协程服务。
一个服务器,有上万的客户端接入。就有上万的协程,每个协程对应一个客户端。
有几个,十几个线程组成线程池。
平时,所有协程在epoll队列里休眠,所有线程处于epoll_wait()状态。
一个客户端发出请求,就会有一个线程被唤醒接受它。这个协程与这个线程进行一个绑定(一个协程同时只能绑定一个线程。多了,叫做“惊群”)。
以下情况可能导致解绑:
1.本次请求任务完成。
2.或需要进行异步IO,这个协程进入epoll队列,线程进行epoll_wait() 等待接受新的任务。
这个流程逻辑简单,工作也很可靠。但是有一个缺点:
线程锁不可以跨越异步IO。因为调用时与返回时的线程可能不同。
单线程协程也不可以使用线程锁,可能一个协程加锁被另一个协程解锁。
这个被称为协程安全。
--
修改:ylh1969 FROM 221.221.53.*
FROM 221.221.53.*