“阻塞式和非阻塞式”的版本间的差异
跳到导航
跳到搜索
(创建页面,内容为“=概念= <pre> 在阻塞模式下,若从网络流中读取不到指定大小的数据量,阻塞IO就在那里阻塞着。比如,已知后面会有10个字节…”) |
|||
(未显示同一用户的4个中间版本) | |||
第9行: | 第9行: | ||
虽然说,非阻塞IO比阻塞IO有更高的性能,但是对于开发来的,难度就成数倍递增了。由于是有多少数据就读取多少数据,这样在读取完整之前需要将已经读取到的数据保存起来,而且需要与其他地方来的数据隔离开来不能混在一起,否则就不知道这数据是谁的了,呵呵。 | 虽然说,非阻塞IO比阻塞IO有更高的性能,但是对于开发来的,难度就成数倍递增了。由于是有多少数据就读取多少数据,这样在读取完整之前需要将已经读取到的数据保存起来,而且需要与其他地方来的数据隔离开来不能混在一起,否则就不知道这数据是谁的了,呵呵。 | ||
</pre> | </pre> | ||
+ | |||
+ | =see also= | ||
+ | [https://www.cnblogs.com/wangyang108/p/6031013.html 阻塞式和非阻塞式IO ] | ||
+ | |||
+ | [https://blog.csdn.net/JMW1407/article/details/107899340 浅谈5种IO模型——阻塞式IO、非阻塞式IO、信号驱动IO、多路复用IO及异步IO] | ||
+ | |||
+ | [https://www.zhihu.com/question/19732473 怎样理解阻塞非阻塞与同步异步的区别] | ||
+ | |||
+ | [https://blog.csdn.net/zhongvv/article/details/108938750 阻塞式编程和非阻塞式编程区别] | ||
+ | |||
+ | [[category:ops]] |
2021年7月16日 (五) 13:28的最新版本
概念
在阻塞模式下,若从网络流中读取不到指定大小的数据量,阻塞IO就在那里阻塞着。比如,已知后面会有10个字节的数据发过来,但是我现在只收到8个字节,那么当前线程就在那傻傻地等到下一个字节的到来,对,就在那等着,啥事也不做,直到把这10个字节读取完,这才将阻塞放开通行。 在非阻塞模式下,若从网络流中读取不到指定大小的数据量,非阻塞IO就立即通行。比如,已知后面会有10个字节的数据发过来,但是我现在只收到8个字节,那么当前线程就读取这8个字节的数据,读完后就立即返回,等另外两个字节再来的时候再去读取。 从上面可以看出,阻塞IO在性能方面是很低下的,如果要使用阻塞IO完成一个Web服务器的话,那么对于每一个请求都必须启用一个线程进行处理。而使用非阻塞IO的话,一到两个线程基本上就够了,因为线程不会产生阻塞,好比一下接收A请求的数据,另一下接收B请求的数据,等等,就是不停地东奔西跑,直接到把数据接收完了。 虽然说,非阻塞IO比阻塞IO有更高的性能,但是对于开发来的,难度就成数倍递增了。由于是有多少数据就读取多少数据,这样在读取完整之前需要将已经读取到的数据保存起来,而且需要与其他地方来的数据隔离开来不能混在一起,否则就不知道这数据是谁的了,呵呵。