资源:
$ man man
)
阻塞
,指进程在发起System Call后,由于该系统调用不能立即完成,需要等待,于是内核将进程挂起,进程进入等待(waiting)状态, 以确保它不会被调度执行。而非阻塞
会立即返回,可能成功,也可能失败,或其它状态。阻塞或非阻塞,设置在FD(File Descriptor)上。同步
表示会等待,但等待的不仅仅是阻塞的system call,可能还有其它资源,比如mutex等。而异步
表示不会等待,非阻塞的IO操作,就是异步IO。比如buffer为空时的read,如果FD是阻塞的,read就是同步的,要等待数据到来再返回;如果FD是非阻塞的,read就是异步的,没有数据也直接返回,毫不犹豫,不等待。(man 7 aio,貌似我对异步的理解还不到位?)IO Multiplexing
,IO多路复用,多路表示多个FD,复用的是一个线程。这个概念与FD是否阻塞无关,阻塞或非阻塞的FD都可以用epoll,非阻塞的FD还可以直接IO。有些地方也称这种IO方式为event driven IO。- 某个线程中的协程,一定是串行的,OS感知不到协程的存在。
-- 目录[4] --