[Day 16] IOCP Input/Output Completion Port

前言

今天要聊到 IOCP 也是一种非同步 IO 的处理方案, 是由 windows 提供的, 而昨天的 epoll 则是 linux 提供的非同步 IO 处理方案。不过说是处理方案, 我更觉得他们是一种排程演算法, 他们提供了一种面对非同步 IO 时调度 thread 的作法。

此外, 他们跟我们的主题有着很大的关系, 非同步 IO 不就是 JS 中最常见的非同步吗, 这些东西的原理显然跟 node 的实践有所关连。

What is IOCP

https://zh.wikipedia.org/wiki/IOCP

简单来说, IOCP 就是一种非同步监听 IO 的方法, 其跟 linux 中的 epoll 有着差不多的关系, 而实际上我个人觉得这两种演算法的思路也是差不多, 只是实践上有一些分歧而已。

IOCP 提供介面让使用者注册事件, 也提供方法可以 non-blocking 的运行, 运行完成後触发特定事件。

还有一个方法是使 thread 沉睡, 当事件发生时才被唤醒, 这三个工具的组合可以实践出 IOCP modle

以下简述流程 :

  1. 建立一个可以被使用者读取的 queue
  2. 利用 IOCP 提供的 method 注册事件
  3. 事件发生後使用 IOCP 提供的方法 non-blocking 的把资讯移到第一步创建的 queue
  4. 利用 IOCP 的方法沉睡的 threads 发现 queue 里有东西, 自己醒来後取出资料与进行处理

明天进度

利用 IOCP 实践第二天的 http server , 里面会利用 IOCP 而拥有 schedule 机制。

明天见 !


<<:  沟通这回事:个人经验篇

>>:  Material UI in React [ Day15 ] Navigation Stepper 步骤卡

[Day20] Open Redirect - 开放重定向

前言 Open Redirect漏洞除了拿来钓鱼,还有呢? 正文 概念 Open Redirect常...

D3JsDay02 学学D3JS 技能提高SSS—为什麽D3

图片来源:unsplash 关於资料视觉化的工具一般使用者最先接触的可能是Microsoft Ex...

[Raspberry Pi] VNC远端

开启Terminal 安装VNC server [tightvncserver] sudo apt-...

[iT铁人赛Day15]JAVA更多的回圈

今天要来介绍的也是回圈 一个更好用的多重选择-switch叙述 当程序有较多的叙述,有较多的选择时,...

【Day 16】从一开始的 Anti-Debug 生活 - Anti-Debug

环境 Windows 10 21H1 x64dbg Aug 2 2020, 13:56:14 Vis...