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 。
    库的接口同线程创建和管理完全解耦,并且允许在线程不可用的平台上实现。
  • 相关阅读:
    python第四章:列表
    python第三章:函数
    python第二章:控制流
    python第一章:基础
    Spring Boot 集成 Mybatis(druid 数据库连接池 以及 分页配置)
    Spring Boot与Logback的运用(自定义异常+AOP)
    Spring Boot 简单的请求示例(包括请求体验证)
    Spring Boot之初始化项目
    深入理解javascript系列,读书笔记
    事件冒泡机制和事件委派 以及回调的匿名函数参数
  • 原文地址:https://www.cnblogs.com/learn-my-life/p/5270102.html
Copyright © 2011-2022 走看看