您的位置:首页 > 其它

多线程和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 。库的接口同线程创建和管理完全解耦,并且允许在线程不可用的平台上实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: