4-6 IO Сравнение моделей

Сравнение моделей ввода-вывода

До сих пор четыре IO модель введены более. Теперь вернитесь назад и ответить на первые несколько вопросов: различие между блокировкой и без блокировки , в котором разница между синхронным IO и асинхронного ввода - вывода являются.
Самый простой ответ на этот вопрос : блокирование против неблокируемого. Предыдущая презентация уже очень четкое объяснение разницы между ними. Дело будет возвращаться немедленно вызвать блокирование IO блока всегда будет жить в соответствующем процессе , пока операция не будет завершена, и неблокирующая IO также подготовки данных в ядре.

再说明synchronous IO和asynchronous IO的区别之前,需要先给出两者的定义。Stevens给出的定义(其实是POSIX的定义)是这样子的:  
A synchronous I/O operation causes the requesting process to be blocked until that I/O operationcompletes;  
An asynchronous I/O operation does not cause the requesting process to be blocked;   
两者的区别就在于synchronous IO做”IO operation”的时候会将process阻塞。按照这个定义,四个IO模型可以分为两大类,
之前所述的blocking IO,non-blocking IO,IO multiplexing都属于synchronous IO这一类,而 asynchronous I/O后一类 。

有人可能会说,non-blocking IO并没有被block啊。这里有个非常“狡猾”的地方,定义中所指的”IO operation”是指真实的IO操作,
就是例子中的recvfrom这个system call。non-blocking IO在执行recvfrom这个system call的时候,如果kernel的数据没有准备好,
这时候不会block进程。但是,当kernel中数据准备好的时候,recvfrom会将数据从kernel拷贝到用户内存中,这个时候进程是被block了,
在这段时间内,进程是被block的。而asynchronous IO则不一样,当进程发起IO 操作之后,就直接返回再也不理睬了,直到kernel发送一个信号,
告诉进程说IO完成。在这整个过程中,进程完全没有被block。

各个IO Model的比较如图所示:

IO Сравнение моделей

После приведенного выше описания, вы увидите разницу между неблокирующая IO и асинхронный IO-прежнему очень очевидна. В неблокирующем IO, хотя большая часть времени этот процесс не будет блок, но он по-прежнему требует процесса взять на себя инициативу в проверке, и когда данные готовы после завершения процесса также должен взять на себя инициативу, чтобы позвонить recvfrom снова, чтобы скопировать данные в память пользователя , Асинхронный ввод-вывод полностью отличается. Это как весь процесс пользовательского операций ввода-вывода переданы другим лицам (ядро) завершается, то сигнал остальным, чтобы закончить. В то же время, этот процесс не требует от пользователя, чтобы проверить состояние операций ввода-вывода, не нужно брать на себя инициативу, чтобы скопировать данные.

рекомендация

отwww.cnblogs.com/shibojie/p/11664839.html