您的位置:首页 > 其它

读取2个或2个以上的I/O时,如何解决一直等待而引起的阻塞问题?

2013-10-05 15:16 267 查看
读取两个或者两个以上的I/O,如果使用了阻塞的I/O,如果长时间的阻塞在一个文件描述符上,其他描述符即使有数据也不能够读取出来,如何解决这个问题呢,下面提供集中方案以及他们之间的对比:

1、使用多线程或者多进程,以达到隔离用户的目的,但是这会增加系统开销,开辟进程或者线程都会对于内存堆栈等系统资源产生一定的开销;

2、使用非阻塞的I/O,当一个I/O不可读是立即返回,去读取下一个I/O,这种方式成为轮询(polling),这种方式会消耗CPU的时间,对于任何一个文件描述符,CPU都要不断地反复执行read系统调用;

3、异步I/O,当一个文件描述符准备好之后通过信号告诉进程,哪个文件描述符已经准备就绪,由于信号个数有限,所以还会导致一定的限制;

4、采用I/O多路复用,利用select,poll或者epoll机制来进行处理,这种方式,3中机制各有优缺点,select有文件有文件描述符限制,最大为1024,而且当文件描述符较多时,效率会大大降低,epoll机制相对于select具有很高地效率,但是epoll在处理数量少文件描述符时,没有select或poll效率高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: