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的时间。
    );


  • 相关阅读:
    Java语言中:float数据类型在内存中是怎么存储的?
    Java语言中:在数据类型的讲解中补充的几个小问题
    groovy : poi 导出 Excel
    php 基础入门篇之前言
    C 实现strcmp,strcpy,strcat函数
    CSDN 夏令营程序 试题分析 (3)
    HDU 1560 IDA*搜索
    iOS怎样找到自己的沙盒
    51系列小型操作系统精髓 简单实现2
    排序算法总结之折半插入排序
  • 原文地址:https://www.cnblogs.com/sdk123/p/6915762.html
Copyright © 2011-2022 走看看