读取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效率高。
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效率高。
相关文章推荐
- 如何解决编程中Excel不能读取的问题
- 如何解决由于编码不同引起的乱码问题
- 发现并解决linux高I/O Wait问题 – 如何发现linux中引起高io等待的进程
- 如何解决series内data为null或者0所引起的图表线条断层问题
- 如何解决2012年7月1日增加闰秒后引起linux系统重启问题
- 如何解决编程中Excel不能读取的问题
- 如何解决Android7.0及以上的权限崩溃问题
- windows下如何解决PHP调用的外部程序超时阻塞问题
- PHP中Session引起的脚本阻塞问题解决办法
- 解决android6.0以上不能读取外部存储权限的问题
- 如何解决 SQL Server 中的锁升级所致的阻塞问题
- SqlServer中如何解决session阻塞问题
- 解决java读取大文件内存溢出问题、如何在不重复读取与不耗尽内存的情况下处理大文件
- 解决java读取大文件内存溢出问题、如何在不重复读取与不耗尽内存的情况下处理大文件
- 【转载】如何将dede织梦data目录正确迁移及引起的问题解决方法
- 解决java读取大文件内存溢出问题、如何在不重复读取与不耗尽内存的情况下处理大文件
- Java读取、写入文件如何解决乱码问题
- PHP中Session引起的脚本阻塞问题解决办法
- Java读取、写入文件如何解决乱码问题
- 解决java读取大文件内存溢出问题、如何在不重复读取与不耗尽内存的情况下处理大文件