File tree Expand file tree Collapse file tree 1 file changed +2
-2
lines changed Expand file tree Collapse file tree 1 file changed +2
-2
lines changed Original file line number Diff line number Diff line change @@ -280,7 +280,7 @@ IO multiplexing对应的I/O系统调用是 ``select`` 和 ``epoll`` 等,也称
280280信号驱动IO(signal driven I/O)
281281~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
282282
283- 当进程发出一个 ``read `` 系统调用时,会向内核注册一个信号处理函数,然后系统调用返回,进程不会被阻塞,而是继续执行。当内核中的IO数据就绪时,会发送一个信号给进程,进程便在信号处理函数中调用IO读取数据。这是模型的特点是 ,采用了回调机制,这样开发和调试应用的难度加大。
283+ 当进程发出一个 ``read `` 系统调用时,会向内核注册一个信号处理函数,然后系统调用返回,进程不会被阻塞,而是继续执行。当内核中的IO数据就绪时,会发送一个信号给进程,进程便在信号处理函数中调用IO读取数据。此模型的特点是 ,采用了回调机制,这样开发和调试应用的难度加大。
284284
285285异步IO(Asynchronous I/O)
286286~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -310,4 +310,4 @@ IO multiplexing对应的I/O系统调用是 ``select`` 和 ``epoll`` 等,也称
310310
311311有人可能会说,执行非阻塞IO系统调用的用户进程并没有被阻塞。其实这里定义中所指的 **IO操作 ** 是指实际的 **IO操作 ** 。比如,非阻塞IO在执行 ``read `` 系统调用的时候,如果内核中的IO数据没有准备好,这时候不会block进程。但是当内核中的IO数据准备好且收到用户进程发出的 ``read `` 系统调用时(处于第二阶段), 内核中的 ``read `` 系统调用的实现会将数据从kernel拷贝到用户内存中,这个时候进程是可以被阻塞的。
312312
313- 而异步IO则不一样,当用户进程发起IO操作之后,就直接返回做其它事情去了,直到内核发送一个通知,告诉用户进程说IO完成。在这整个过程中,用户进程完全没有被阻塞。
313+ 而异步IO则不一样,当用户进程发起IO操作之后,就直接返回做其它事情去了,直到内核发送一个通知,告诉用户进程说IO完成。在这整个过程中,用户进程完全没有被阻塞。
You can’t perform that action at this time.
0 commit comments