![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机网络
文章平均质量分 51
大佬学习叫上我
这个作者很懒,什么都没留下…
展开
-
UNIX/LINUX上常见的I/O模型
阻塞I/O 应用程序使用read函数,通过系统调用到内核态查看数据是否准备好,等待过程中线程就会在挂起状态,当数据到达以后数据准备好,进行拷贝数据也就是从内核当中把数据拷贝到我们的buf数组里,拷贝完成以后再返回给用户态。 阻塞I/O的线程不能往下执行,只能等待。 非阻塞I/O 线程通过read转到内核态,如果数据没有准备好,会返回-1再带上EAGAIN,接下来再调用一次直到数据准备好。等数据准备好以后再从内核当中把数据拷贝到用户空间,拷贝完成后返回。 好处就是线程不会挂起,程序可以往下执行做一些其他的事。原创 2021-07-14 15:07:13 · 82 阅读 · 0 评论 -
网络I/O
网络I/O 网络IO部分经常会被问到同步/异步、阻塞/非阻塞相关知识点,下面来总结一下我对这些知识点的理解。 网络IO有两个阶段第一个是数据就绪,第二阶段是数据读写。 数据就绪 数据就绪可以理解为数据有没有到达。那我们该怎么判断数据有没有到达呢?可以通过TCP接受缓冲区有没有数据到达来判断数据就绪,如果有数据那么就说明有数据到达了,如果TCP接受缓冲区没有数据那么说明没有数据到达。 数据就绪阶段又可以分为两个知识点,阻塞/非阻塞。 阻塞:调用了读写(I/O)方法的线程进入阻塞状态。 通俗的来说就是当我调用r原创 2021-07-14 12:13:12 · 186 阅读 · 0 评论