Asio 核心概念和功能文档学习(三)
来源:互联网 发布:打印数组 编辑:程序博客网 时间:2024/06/04 23:30
线程和Asio
线程安全
一般来说,并发使用不同对象是安全的,但并发使用同一对象是不安全的。然而,诸如is_service类型提供了安全并发使用同一个对象的强保证。
线程池
多线程可以调用io_service::run()设置调用完成处理程序的线程池。这个方法也可以被用于io_service::post()以用一种方式执行任何分配给一个线程池的计算任务。
需要注意的是所有加入is_service的池的线程被认为是平等的,并且io_service可以在它们之间以任意方式分发工作。
内部线程
特定平台的库实现可能使用了一个或更多的线程来模拟异步。这些线程必须尽可能的对库使用者不可见。特别的,线程:
一定不能直接调用用户代码;并且
必须阻塞所有信号。
这个方法实现由以下保证:
异步完成处理程序只会被当前正调用io_service::run()的线程调用。
因此,创建和管理所有要传递通知的线程是库使用者的责任。
这种方式的理由包括:
通过只从一个线程调用io_service::run(),用户代码能够避免结合同步开发的复杂性。例如,库使用者可以实现可伸缩的单线程服务(从用户的角度)。
库使用者可能需要在线程开始短暂的时间以后并且任何其他应用代码执行之前在线程中执行初始化。例如,微软的COM的使用者在任何其他COM操作能被线程调用之前必须调用CoInitializeEx。
库接口与线程创建和管理的接口是解耦的,并且允许在没有线程的平台上实现。
- Asio 核心概念和功能文档学习(三)
- Asio 核心概念和功能文档学习(一)
- Asio 核心概念和功能文档学习(二)
- Asio 核心概念和功能文档学习(一)
- kamon文档翻译(三)--Tracing-核心概念
- OpenCV学习笔记4 OpenCV核心模块与核心功能Core Module & Core Functionality(三)
- asio学习之三:asio实现简单的服务器和客户端
- lucene和elasticsearch的前世今生、elasticsearch的核心概念、elasticsearch核心概念 vs. 数据库核心概念(来自学习资料)
- Boost.Aiso概述 核心概念和功能0
- Boost.Aiso概述 核心概念和功能1
- Boost Asio库的学习与探究(三)
- spring学习(一)________核心概念
- Ember学习(1):Ember核心概念
- loopback学习(2)--核心概念
- (转)浅说深度学习:核心概念
- Maven核心概念学习
- jQuery——入门(三)JQuery DOM操作(核心处理和文档处理)
- docker三大核心概念
- C++内存管理
- 存储过程的使用时机,使用存储过程意义何在?
- 基于E-R模型数据库设计
- Asio 核心概念和功能文档学习(二)
- MFS部署
- Asio 核心概念和功能文档学习(三)
- matlab 矩阵合并的函数cat()
- winform里让listview勾选项勾选时只能勾选一个的方法
- 死锁问题
- 23种设计模式之间的关系
- 申请Google Map API Key
- 浮点数在内存中的表示
- linux 使用ssh远程登录远程主机
- 一篇完整的doxygen示例代码