首页 > 代码库 > 010 异步I/O处理 003
010 异步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的时间。 );
010 异步I/O处理 003
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。