boost::asio库的async_*函数是否由操作系统并行执行?
Are those async_* functions of boost::asio lib executed parallelly by OS
最近我正在使用boost::asio库,并且对那些async_*函数有一个问题。
假设我连续调用多个boost::asio::async_write()
,是否有可能这些async_write()
函数由底层操作系统并行执行,即使io_service是单线程运行
谢谢!
这些async_write()函数是否可能并行执行底层操作系统
是的,他们是!
异步操作有两种类型:cpu绑定任务和io绑定任务。
cpu绑定任务是指只涉及cpu执行的任务,如计算、向RAM读取和写入数据等。
IO绑定任务是涉及到读写设备的任务,如硬盘(文件IO),网卡(网络IO)等。
为了异步执行cpu绑定的任务,你需要多个线程,但IO不同。异步IO不利用线程并行,它只是将请求排队到相关设备(硬盘,网卡等),然后继续执行另一个代码,而不等待IO完成。
所以,异步IO(例如,通过boost As synchronous IO)即使没有多线程,仍然可以并行工作。相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 如果操作系统未清除内存泄漏,则在程序完成后内存泄漏是否仍然存在?
- 使用C++代码检查操作系统是否可用(如果可用,是否打开/关闭)
- 操作系统在C 汇编过程中是否有任何作用
- 如何检查操作系统是否至少是Windows XP SP3
- LibC 操作系统是否存在
- 检测处理器在32位操作系统下是否为64位
- 拍摄进程快照在 32 位和 64 位操作系统中是否有效?
- 是否可以在c++中检测操作系统
- CD 上的.exe是否会在没有操作系统的计算机上安装
- 是否有一个库(跨平台)来处理操作系统日期
- 是否可以使用 64 位操作系统创建 32 位程序
- 通过Powershell命令检查远程机器的操作系统类型是否为2008 R2
- 是否有 API 来获取操作系统中定义的原始变量值
- 是否有任何操作系统允许将内存从一个地址移动到另一个地址而不进行物理复制?
- 检查我的互联网提供商是否支持并在我的操作系统中以编程方式启用IPv6/Teredo
- boost::asio库的async_*函数是否由操作系统并行执行?
- 在流行的现代操作系统中,是否存在线程本地存储的已知大小限制?
- 所有移动操作系统是否支持ANSI C / ISO c++ ?
- 在Windows C++或C#中,您可以询问操作系统当前是否正在关闭/重新启动/注销