Asio 核心概念和功能文档学习(三)
2012-09-21 09:31
477 查看
线程和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 核心概念和功能文档学习(二)
- Ext JS 6学习文档–第2章–核心概念
- Spring核心学习(1)实现基本的容器-包括注入和获取功能
- NIO学习系列:核心概念及基本读写
- 【学习笔记】3D图形核心基础精炼版-3:屏幕中的三维坐标概念
- java核心技术学习笔记1---基本概念
- maven 学习总结(四)——Maven核心概念
- 一款功能强大并且可以结合html5实现本地存储的数据库 – SQLite学习文档
- Ext学习-基础概念,核心思想介绍
- NodeJs基础配置、核心概念与学习路线回顾
- NIO学习--核心概念与基本读写
- NIO学习--核心概念与基本读写
- JavaScript学习路上---js 核心概念
- Maven核心概念学习
- 【Netty in Action学习笔记】Netty核心组件概念