我正在探索基于 boost asio 和完成处理程序将多线程 C++ 应用程序转换为异步网络风格的选项。但是有两个症结:
- 一个线程是否可以进行异步写入而另一个线程运行其完成处理程序?第一个线程属于一个框架(因此不能成为异步线程池的一部分)但它是唯一可以创建工作的线程。框架线程也对套接字进行异步写入,但它会立即返回运行框架代码,因此不可用。第二个线程由我的代码创建,因此可用于运行完成处理程序。 boost asio 是否有办法让框架线程启动异步 IO 但另一个线程运行生成的完成处理程序?
- 如果异步模型没有区分计算线程和 IO 线程,并且线程不是可抢占的(除非我们使用协程),那么 IO 完成处理程序是否真的有可能,例如读取,可以被执行计算的线程“饿死”吗?