见84楼,yield之后判断返回状态,如果yield失败,就会自动转成同步模式。
见85楼,如果为context分配栈失败,该context就不是一个协程,它的IO走到这里就会自动转成同步模式。该任务的一切活动不受影响,只不过在大数据包的IO期间死占线程。
测试过从北京呼叫处于国外的管理器,一个64K的包被切成好几段。协程的任务会被调度好几次,非协程的一气呵成,但是期间抓死线程。
【 在 wallyz 的大作中提到: 】
: “如果异步操作出现任何异常,就立即转换为同步模式,不会耽误事。”
: 我对这里也感觉纳闷
: 异步出现非正常情况,除了连接断掉之外,无外乎是EAGAIN/EWOULDBLOCK,也就是read没数据或者write缓冲区满,这时候转成同步模式是不合适的,转成同步模式会阻塞当前线程,这样做和就地poll这个socket没啥两样,都会造成线程被阻塞
: ...................
--
修改:ylh0315 FROM 221.218.61.*
FROM 221.218.61.*