12.IO相关概念

NIO 非阻塞IO

BIO 阻塞IO

stream vs channel

1.stream不会自动缓冲数据;channel会利用系统提供的发送缓冲区,接受缓冲区,更为底层。

2.stream仅支持阻塞API;channel同时支持阻塞、非阻塞API,网络channel可配合selector实现多路复用。

3.二者均为全双工,即读写可以同时进行

当调用一次channel.read或stream.read后,会切换至操作系统内核态来完成真正数据读取,读取又分为两个阶段:

1.等待数据阶段。读取的时候不一定有数据,没有数据就会等待。

2.复制数据阶段。会把网卡上的数据复制到操作系统内存中。

IO模型

1.阻塞IO(同步),用户线程发起一次read操作,会由用户空间切换到内核空间去真正读取数据,但是网络上可能没有数据,这时read方法就会阻塞住,就是线程停止等数据,这期间什么也干不了,用户和内核都要等待。等待数据到了,进行数据的复制,从网卡复制到内存中,再由内核空间切换到用户空间,返回数据,read方法调用就结束了。缺点:做一件事的时候就做不了另一件事。

2.非阻塞IO(同步), 用户线程发起一次read操作,会由用户空间切换到内核空间去真正读取数据,但是网络上可

相关推荐

  1. 12.IO相关概念

    2024-06-16 05:44:06       8 阅读
  2. 路由相关基本概念IP入门)

    2024-06-16 05:44:06       16 阅读
  3. 数据仓库相关概念

    2024-06-16 05:44:06       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-16 05:44:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-16 05:44:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-16 05:44:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-16 05:44:06       18 阅读

热门阅读

  1. C#_构造函数 new this 析构函数

    2024-06-16 05:44:06       9 阅读
  2. C++:特殊类

    2024-06-16 05:44:06       6 阅读
  3. c++_0基础_讲解3 输入 输出

    2024-06-16 05:44:06       6 阅读
  4. vuex是什么?如何使用?使用他的功能场景?

    2024-06-16 05:44:06       8 阅读
  5. perl语言入门学习

    2024-06-16 05:44:06       7 阅读
  6. 新增套餐——后端

    2024-06-16 05:44:06       6 阅读
  7. 向mysql发送一个请求的时候,mysql到底做了什么

    2024-06-16 05:44:06       8 阅读