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'