Boost.Asio - Threads and Boost.Asio

Thread Safety

一般来说,不同对象的并发使用是安全的,但单一对象的并发使用是不安全的。然而,像io_context这样的类型可以为并发使用单一对象提供强有力的保证。

Thread Pools

多个线程可以通过调用io_context::run()来设置一个线程池,可以在线程池中调用完成处理程序。这个方法也可以与post方法一起使用,作为跨线程池执行任意计算任务的一种方法。
.
注意所有被加入到io_context的线程池的线程都是等价的,io_context可以在所有线程之间以任意方式分配任务。

Internal Threads

对于特定平台的库实现可以使用一个或多个线程来模拟异步性。这些线程必须尽可能地对库用户不可见。尤其是,这些线程:

  • 必须不直接调用库用户代码,
  • 必须阻塞所有信号

以下保证补充了这个方法:

  • 异步完成处理器只会被当前调用io_context::run()的线程调用。

因此,库用户的责任是创建并管理通知被递送到的所有线程。

采用这种方法的原因:

  • 从一个线程调用io_context:run(),用户代码可以避免与同步相关的开发复杂性。例如,一个库用户可以实现可扩展的服务器,这个服务器只有一个线程(只是从用户视角看,只有一个线程,实际上不一定只有一个线程)。
  • 库用户可能需要在线程启动后和其他应用代码被执行前,立即在线程中执行初始化。例如,Microsoft’s COM用户必须在其他COM操作被调用之前调用CoInitializeEx 。
  • 这个库接口与线程创建和管理接口解耦合,并且允许在线程不可用的平台上实现。
    See Also
    io_context, post.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值