I/O模型

I/O模型
看了这个帖子,归纳了一下自己理解的 I/O 模型,不知道对不对。

下边我们假设这样一个场景:

我 去食堂打饭。需要从3个得到3样东西:4两米饭,回锅肉,素菜。

  1. blocking: 打饭的人多啊,哥一直排队等,知道买到3样东西完毕。
  2. non-blocking 去食堂一看,卧槽,那么jb多人排队,算了不吃了。这里的我就是一个 fd (file descriptor),这样做急性子的人就叫做 O_NONBLOCK 属性。如果你尝试让一个急性子买饭,人少还好,人多了他会直接抛出一个异常报错。
  3. sync 先买米饭,再买回锅肉,再买素菜。如果临时回锅肉卖完了怎么办?等食堂师傅一直炒出下一锅为止。而且必须先买到回锅肉再买素菜!
  4. async 哪个窗口人少就先买哪个,哪个窗口先出锅就先买那个。

再说说unix 5种IO模型:

  1. 复用 (multiplexing): 寝室5个好基友一起去买饭。到了食堂一看卧槽这么多人,于是都纷纷叫你帮买了。这样,你就作为一个调度器被复用了。窗口人多,菜也不全,就先看到有啥就先买着呗。没有就傻等呗。
  2. SIGIO 我觉得在窗口傻等不行,打通了炒锅的师傅,他们每出一道菜,就通知我一下,我看看有没有自己需要的。你作为一个上菜的信号的接受回调,这样,你就可以一边在手机上看YY小说一边等上菜了。但是比如TCP这种SIGIO信号居多的菜,你监听了一会儿就觉得快崩溃了!

Comments