Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C I/O多路复用中的写入块是如何工作的?_C_Asynchronous_Io_Epoll_Multiplexing - Fatal编程技术网

C I/O多路复用中的写入块是如何工作的?

C I/O多路复用中的写入块是如何工作的?,c,asynchronous,io,epoll,multiplexing,C,Asynchronous,Io,Epoll,Multiplexing,我正在学习使用epoll、poll等编写非阻塞服务器和客户端应用程序,并遇到以下事件标志: 民意测验: 现在写作不会阻碍你 我理解阻塞读取的概念。但是什么是阻止写入呢?如果您以比另一端读取的速度更快的速度向管道、套接字或终端之类的设备写入,最终您将填充相关的内核缓冲区,后续写入将被阻止,直到另一端读取某些数据。如果您正在向管道之类的设备写入,套接字或终端的读取速度比另一端快,最终您将填充相关内核缓冲区,后续写入将阻塞,直到另一端读取某些数据。在任何I/O操作中,都可能需要访问硬盘(或其他速度较慢

我正在学习使用epoll、poll等编写非阻塞服务器和客户端应用程序,并遇到以下事件标志:

民意测验: 现在写作不会阻碍你


我理解阻塞读取的概念。但是什么是阻止写入呢?

如果您以比另一端读取的速度更快的速度向管道、套接字或终端之类的设备写入,最终您将填充相关的内核缓冲区,后续写入将被阻止,直到另一端读取某些数据。

如果您正在向管道之类的设备写入,套接字或终端的读取速度比另一端快,最终您将填充相关内核缓冲区,后续写入将阻塞,直到另一端读取某些数据。

在任何I/O操作中,都可能需要访问硬盘(或其他速度较慢的I/O设备)并返回。“阻塞”调用只是在完成往返I/O时等待的调用——同时,您的。所以,就像你可以等待阅读完成一样,你也可以等待写作


对于传统的应用程序来说,这通常不太有用——你想告诉操作系统写你的数据,那么这就不再是你的问题了。当您试图保证存储在I/O设备(如硬盘)上的数据完整性(如在关系数据库系统中)时,这将成为您的问题。(请注意,阻止并不是保证写入已完成的唯一方法。同时请注意,随着计算机的复杂性不断增加,存在多层缓存,可能会或可能不会干扰实际阻止。)

在任何I/O操作中,都可能需要访问硬盘(或其他速度较慢的I/O设备)而背后存在着。“阻塞”调用只是在完成往返I/O时等待的调用——同时,您的。所以,就像你可以等待阅读完成一样,你也可以等待写作

对于传统的应用程序来说,这通常不太有用——你想告诉操作系统写你的数据,那么这就不再是你的问题了。当您试图保证存储在I/O设备(如硬盘)上的数据完整性(如在关系数据库系统中)时,这将成为您的问题。(请注意,阻止并不是保证写入已完成的唯一方法。同时请注意,随着计算机的日益复杂,有多层缓存可能会或可能不会干扰实际的阻止。)

磁盘文件不会在UNIX意义上阻止—它们被认为是“快速的”,这意味着进程将进入磁盘等待状态,而不是休眠状态
epoll()
将始终报告磁盘文件的
POLLOUT
(和
POLLIN
)。磁盘文件不会在UNIX意义上阻塞—它们被视为“快速”,这意味着进程进入磁盘等待状态而不是休眠状态
epoll()
将始终报告磁盘文件的
POLLOUT
(和
POLLIN
)。