Linux中的函数select和poll用来支持I/O复用的功能,在Linux中I/O模型可以分为以一几种:(引用叶剑峰)
(1)阻塞I/O
这个模型也是最容易理解的
程序调用和我们基本的程序编写是一致的:
fd = connect()
write(fd)
read(fd)
close(fd)
程序的read必须在write之后执行,当write阻塞住了,read就不能执行下去
(2)非阻塞I/O
从图中可以看出来,这是一个轮询的过程
每次用户询问内核是否有数据报准备好(文件描述符缓冲区是否就绪),当数据报准备好的时候,就进行拷贝数据报的操作。当数据报没有准备好的
时候,也不阻塞程序,内核直接返回未准备就绪的信号,等待用户程序的下一次轮询。
设置非阻塞io:
#include <fcntl.h>
int fcntl(int fd, int cmd

本文介绍了Select模型在IO复用中的作用,通过示例展示了如何使用select函数进行文件描述符的监听,并详细解释了fd_set集合的操作,包括FD_ZERO、FD_SET、FD_CLR和FD_ISSET等函数。同时提到了该模型的阻塞性质和相对于阻塞IO的效率提升。最后,以匿名管道和非阻塞读的场景为例,说明了在JNI中使用Select模型的应用。
最低0.47元/天 解锁文章
7441

被折叠的 条评论
为什么被折叠?



