[关闭]
@john-lee 2021-01-03T03:45:20.000000Z 字数 1204 阅读 923

并发提示(Concurrency Hints)

Boost.Asio


io_context构造函数允许程序指定并发提示。这是对io_context实现的一个建议,即应该使用多少活动线程来运行完成处理程序。

当Windows I/O完成端口后端正在使用时,此值将传递给CreateIoCompletionPort

使用基于反应器的后端时,实现会识别以下特殊的并发提示值:

描述
1 实现假定io_context将从单个线程运行,并基于此假设应用若干优化。
例如,当从另一个处理程序中发布处理程序时,新处理程序将添加到快速线程本地队列中(结果新处理程序被推迟到当前执行处理程序完成)。
BOOST_ASIO_CONCURRENCY_HINT_UNSAFE 此特殊并发提示将禁用调度程序和反应器 I/O 中的锁定。此提示具有以下限制:
  • 必须注意确保io_context及其任何关联 I/O 对象(如套接字和计时器)上的所有操作一次只在一个线程中发生。
  • 异步解析操作失败,返回operation_not_supported
  • 如果signal_setio_context一起使用,则signal_set对象不能与程序中的任何其它io_context一起使用。
BOOST_ASIO_CONCURRENCY_HINT_UNSAFE_IO此特殊并发提示禁用反应器 I/O 中的锁定。此提示具有以下限制:
  • 必须注意确保io_context上的运行函数以及上下文相关 I/O 对象(如套接字和计时器)上的所有操作一次只在一个线程中发生。
BOOST_ASIO_CONCURRENCY_HINT_SAFE默认值。io_context提供了完整的线程安全性,可以从任何线程使用不同的 I/O 对象。

通过定义BOOST_ASIO_CONCURRENCY_HINT_DEFAULT宏,可以在编译时重写由默认构造的io_context对象使用的并发提示。例如,指定

-DBOOST_ASIO_CONCURRENCY_HINT_DEFAULT=1

在编译器命令行上,表示对程序中所有默认构造的io_context对象使用1的并发提示。类似地,可以通过定义BOOST_ASIO_CONCURRENCY_HINT_1来覆盖用1构造的io_context对象使用的并发提示。例如,传递

-DBOOST_ASIO_CONCURRENCY_HINT_1=BOOST_ASIO_CONCURRENCY_HINT_UNSAFE

编译器将禁用所有这些对象的线程安全性。


Copyright © 2003-2020 Christopher M. Kohlhoff

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注