c++ - boost::asio lib 的那些 async_* 函数是否由操作系统并行执行

标签 c++ c++11 boost boost-asio

最近我在使用 boost::asio 库,并且对那些 async_* 函数有疑问。

假设我连续调用多个 boost::asio::async_write(),这些 async_write() 函数是否可能由底层操作系统并行执行,即使io_service 是单线程运行的

谢谢!

最佳答案

is it possible that these async_write() functions executed parallelly by the underlying operating system

是的,他们是!
有两种类型的异步操作,CPU 绑定(bind)任务和 IO 绑定(bind)任务。

CPU 密集型任务是只涉及 CPU 执行的任务,例如计算、读写数据到 RAM 等。

IO-Bound 任务是涉及读写设备的任务,如硬盘(文件 IO)、网卡(网络 IO)等。

为了异步执行受 CPU 限制的任务,您需要多个线程,但 IO 不同。异步IO不利用线程并行,它只是将请求排队到相关设备(硬盘、网卡等),然后继续执行另一个代码,而不等待IO完成。

是的,即使没有多线程,异步 IO(例如,由 boost Asynchronous IO 给出)仍将并行工作。

关于c++ - boost::asio lib 的那些 async_* 函数是否由操作系统并行执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40056664/

相关文章:

C++ : how to get a long value from json and convert it to time_point

c++ - 如何避免虚拟关键字

c++ - 我应该根据新标准还是旧标准(规范)来学习C++?

c++ - 如果类数组中的 vector 是动态 push_backed,内存如何工作?

c++ - 如何将指针值转换为枚举?

C++ 11线程初始化与成员函数编译错误

c++ - 右值、左值和正式定义

c++ - 在 comparable_distance 中使用 boost 段失败,而 linestring 有效

C++:使用 fusion 时出现 BOOST_FUSION_ADAPT_STRUCT 错误::at

c++ - 带有可变模板参数的 boost::format