@john-lee
2021-01-01T17:00:08.000000Z
字数 842
阅读 691
Boost.Asio
通常,并发使用不同的对象是安全的,但并发使用单个对象不安全。但是,诸如io_context
之类的类型提供了更有力的保证,即并发使用单个对象是安全的。
多个线程可以调用io_context::run()
来建立一个线程池,从中可以调用完成处理程序。这种方法也可以与post()
一起使用,作为跨线程池执行任意计算任务的方法。
请注意,所有已加入io_context
池的线程都被认为是等效的,并且io_context
可能会以任意方式在它们之间分发工作。
此库对于特定平台的实现可能使用一个或多个内部线程来模拟异步。这些线程必须尽可能对库用户不可见。特别是,线程:
这种方法辅之以以下保证:
io_context::run()
的线程调用。因此,库用户有责任创建和管理将通知传递到的所有线程。
这种方法的原因包括:
io_context::run()
,用户的代码可以避免与同步相关的开发复杂性。例如,库用户可以实现单线程(从用户的角度来看)的可扩展服务器。io_context,post.
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)