Home - meetbill/x-luo GitHub Wiki

Welcome to the Starfish wiki!

阻塞非阻塞以及同步异步

同步与异步说的是你获得某个函数执行结果的方式不同。(同步、异步说的是被调用者)

同步请求,A 调用 B,B 的处理是同步的,在处理完之前他不会通知 A,只有处理完之后才会明确的通知 A。
异步请求,A 调用 B,B 的处理是异步的,B 在接到请求后先告诉 A 我已经接到请求了,然后异步去处理,处理完之后通过回调等方式再通知 A。

阻塞与非阻塞 (IO 多路复用)说的是你得到结果之前能不能干其他事情。(阻塞、非阻塞说的是调用者)

阻塞请求,A 调用 B,A 一直等着 B 的返回,别的事情什么也不干。
非阻塞请求,A 调用 B,A 不用一直等着 B 的返回,先去忙别的事情了。

漫话:如何给女朋友解释什么是 IO 中的阻塞、非阻塞、同步、异步?

个人理解

  上面的 A 和 B 可能是服务级别,也有可能是进程级别,也有可能是线程级别

  如下图,假如是一个进程内的多个线程,主线程为 Master 线程
  +---------------------------+
  |         +--------+        |
  |         | Master |    ----+--------------------- 阻塞与非阻塞是对 Master 线程来说的,在某个时刻,线程要么处于阻塞,要么处于非阻塞。   
  |         /--------+\       |
  |        /           \  -------------------------- Master 调用 Worker ,Worker 的处理方式要么是同步的,要么是异步的
  |  +----/--+     +----\--+  |
  |  |Worker |     |Worker |  |
  |  +-------+     +-------+  |
  +---------------------------+

他山之石

thrift 协议

网络库

handy (C++)

字节

ASCII码:一个英文字母(不分大小写)占一个字节的空间

回车、换行、空格的ASCII码值

  • 回车,ASCII码13
  • 换行,ASCII码10
  • 空格,ASCII码32
Return   =   CR   =   13   =   '\x0d'
NewLine   =   LF   =   10   =   '\x0a'

传送门