多线程和Boost::Asio
2016-03-12 21:21
162 查看
线程安全一般的,高并发使用不同的对象是安全的,在高并发中使用单一的对象是不安全的,io_service类型提供了单对象高并发的强安全保证。线程池多线程可能调用io_service::run()来建立一个可以调用完成句柄的线程池,也可以使用io_service::post()把计算任务交给线程池处理。所有连接了io_service池的线程被认为是地位相等的,io_service可能通过任意方式给它们分配任务。内部的线程这个库在特定平台上可能使用一个或两个内部线程来模拟异步,这些线程对调用者而言是不可见的,尤其是:不可以直接调用用户的代码不可以阻塞任何信号注意事项:下面的函数违反了第一个规则ip::basic_resolver::async_resolve() ,所有平台的实现basic_socket::async_connect() ,windows平台windows平台上所有涉及null_buffers()的操作,除了一个执行在流导向socket的异步读这些方法的实现有以下保证性 异步完成句柄只被哪些当前在调用io_service::run()的线程调用 因此,库用户需要创建和管理所有的需要被通知的线程。这种方法的原因包括:只在一个线程调用io_service:run(),用户的代码可以避免开发复杂的同步关系,比如,一个用户可以创建可控数量的单线程服务器(从用户角度看是单线程的)库用户需要在线程启动后执行任何应用代码以前执行初始化操作,比如,microsoft的COM用户需要在任何其他本线程的COM操作调用前执行CoInitializeEx 。库的接口同线程创建和管理完全解耦,并且允许在线程不可用的平台上实现。
相关文章推荐
- cocos2d-x 菜鸟实习生学习篇(二)helloworld完全注释
- Android开发学习之路--RxAndroid之lambda
- 机器视觉(Machine Vision)学习博客导引
- java设计模式——结构型之装饰模式
- Android开发学习之路--RxAndroid之lambda
- 设计模式-Builder模式
- HTTP、TCP/IP、UDP 详解
- MyBatis入门3--基本操作:增删改+基础查询
- JavaSE入门学习29:Java常用类之StringBuffer类和StringBuilder类
- 1555 How many days?
- 前端编辑器 之 sublime-text3
- 2. Add Two Numbers
- 笔记-最大子序列
- 【入门训练】
- Android实现自定义圆形/圆角ImageView
- 九度OJ:题目 1028 继续畅通工程
- http://write.blog.csdn.net/postedit?ref=toolbar
- Linux中用户和权限管理
- Windows + IDEA + SBT 打造Spark源码阅读环境
- Application类