zoukankan      html  css  js  c++  java
  • 多线程和Boost::Asio

    线程安全
    一般的,高并发使用不同的对象是安全的,在高并发中使用单一的对象是不安全的,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 。
    库的接口同线程创建和管理完全解耦,并且允许在线程不可用的平台上实现。
  • 相关阅读:
    Eclipse中配置约束(DTD,XSD)
    Eclipse集成tomcat
    java使用dom4j对XML进行CURD操作
    SQL数据库操作(CURD)
    Java-IO流总结
    Java-集合框架总结
    AES apache commons-crypto 对称加密
    Redis
    Axis2 客户端调用 设置超时时间
    Sybase 修改数据库默认排序
  • 原文地址:https://www.cnblogs.com/learn-my-life/p/5270102.html
Copyright © 2011-2022 走看看