2016-11-27 75 views
1

boost docboost :: asio :: io_service的concurrency_hint是什么意思?

io_service对象( 的std ::的size_t concurrency_hint);
构建一个关于所需并发级别的提示。

参数

concurrency_hint有人建议的执行情况,应该多少 线程允许同时运行。

这是什么意思“对执行的建议”?

如果我用'2'构造对象,它可能只启动1个线程吗?
如果我有一个4核的CPU,并且我用'4'或'5'来构造对象会发生什么?

回答

3

并发提示允许底层实现根据应该运行io_service的并发线程数量进行选择。例如:

  • 的I/O完成端口,它集并发为完成端口的最高水平。提供的并发提示为NumberOfConcurrentThreads参数CreateIoCompletionPort()。见I/O Completion Ports文档了解更多信息:

    此值限制与完成端口相关联的可运行的线程数。当与完成端口相关联的可运行线程的总数达到并发值时,系统将阻止与该完成端口相关联的任何后续线程的执行,直到可运行线程的数量下降到低于并发值。

  • 当设置为1时,优化实施以避免不必要的锁定。所述Revision History说明:在单线程用例

    使用线程局部操作队列(即,当concurrency_hint为1),以消除一个锁定/解锁对。

+0

谢谢您的回答,请让我知道如果我猜中了: 所以'concurrency_hint'说线程队列的大小? 它并不涉及CPU内核的实际数量,只是说:“你可以在这个'io_service'中运行X个并发线程? – hudac

+0

@hudac是。对于I/O完成端口,'concurrency_hint'集合线程队列的上限核心将是线程并行性的限制,但线程并发可以超过核心数量链接的I/O完成端口文档提供了对NumberOfConcurrentThreads值和线程池大小的推荐。 –

+0

为什么它叫'concurrency_hint'而不是'concurrency'?看起来像提示是队列大小本身,不是? 你的答案会改变而不是I/O完成端口吗? 我的意思是,对于任何'boost :: asio :: io_service'其中包含套接字,文件描述符,事件fds,计时器fds ... – hudac

相关问题