zoukankan      html  css  js  c++  java
  • 011 异步I/O处理 003

     异步I/0
      ○ 使用设备内核对象
      ○ 使用事件内核对象 提醒同步以及交互
      ○ 可提醒I/O 不可跨线程的
      ○ I/O完成端口

      ⊙ I/O完成端口

        ○ 串行模型来进行异步IO操作
        ○ 并行模型 -> 多线程

        ○ 1个工人 -> 加工零件 -> 5天 -> 串行
        ○ 5个工人 -> 加工零件 -> 1天 -> 并行

        ○ 单核 -> 模拟出来的多进程 线程
        ○ 多核 -> 多线程 核心数 -> CPU的一个核心
        ○ 一个进程内可以有多个线程 多线程
        ○ 线程和线程之间可以相互融合

      ⊙ I/O完成端口 天生就是并行模式

        ○ 并行模型 -> 多线程

        ○ 创建队列
          ○ 设备
          ○ 设备

        ○ 设备操作的队列

          ○ 线程池
          ○ 多个线程

        ○ 创建一个完成端口

    1     HANDLE hIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE, nullptr, 0, 0);

    ● CreateIoCompletionPort 函数
    1 HANDLE WINAPI CreateIoCompletionPort(
    2   _In_     HANDLE    FileHandle,                        //内核对象
    3   _In_opt_ HANDLE    ExistingCompletionPort,        //已存在的完成端口 为NULL 则位新建一个IOCP
    4   _In_     ULONG_PTR CompletionKey,                    //传递处理函数的参数
    5   _In_     DWORD     NumberOfConcurrentThreads        //设置线程数 尽量根据物理实际设置
    6 );

    ● PostQueuedCompletionStatus
    1 BOOL WINAPI PostQueuedCompletionStatus(
    2   _In_     HANDLE       CompletionPort,                    //指定想向其发送一个完成数据包的完成端口对象
    3   _In_     DWORD        dwNumberOfBytesTransferred,        //指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数
    4   _In_     ULONG_PTR    dwCompletionKey,                //指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数
    5   _In_opt_ LPOVERLAPPED lpOverlapped                    //指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数
    6 );
    
    
    ● GetQueuedCompletionStatus
    BOOL WINAPI GetQueuedCompletionStatus(
      _In_  HANDLE       CompletionPort,                //指定想向其发送一个完成数据包的完成端口对象
      _Out_ LPDWORD      lpNumberOfBytes,            //一次完成后的I/O操作所传送数据的字节数。
      _Out_ PULONG_PTR   lpCompletionKey,            //当文件I/O操作完成后,用于存放与之关联的CK。
      _Out_ LPOVERLAPPED *lpOverlapped,            //OVERLAPPED  结构体指针
      _In_  DWORD        dwMilliseconds                //用于指定调用者等待CP的时间。
    );


  • 相关阅读:
    对每项物品,找出最贵价格的物品的经销商
    每项物品的的最高价格是多少?
    找出最贵物品的编号、销售商和价格
    查数据库有哪些表、查数据库
    取某字段不为空的数据is not null
    mysql匹配模式
    找出包含正好5个字符的名字
    要想找出正好包含5个字符的名字
    要想找出包含“w”的名字
    要想找出以“y”结尾的名字
  • 原文地址:https://www.cnblogs.com/sdk123/p/6915762.html
Copyright © 2011-2022 走看看