标签:复制到 kernel java 模型 IO 缓冲区 数据 Blocking
每日一句
You cannot swim for new horizons until you have courage to lose sight of the shore. 除非有勇气离开岸边,否则你永远游不到彼岸。
概念
IO 是主存和外部设备(硬盘、终端和网络等)拷贝数据的过程。IO是操作系统的底层功能实现,底层通过I/O指令进行完成。
以下是5种类Unix下可用的I/O模型
-
阻塞式I/O:Blocking IO
-
非阻塞式I/O:nonblocking IO
-
I/O 复用(Select,poll epoll):IO multiplexing
-
信号驱动式I/O(SIGIO):signal driven IO
-
异步 I/O(posix 的 aio 系列函数):asynchromous IO
Blocking IO
在 Linux 中,默认情况下所有的 socket 都是 Blocking,一个典型的读操作流程大概是这样:
-
通常涉及等待数据从网络到达。当所有等待数据到达时,它被复制到内核中的某个缓冲区
-
把数据从内核缓冲区复制到应用程序缓冲区
当用户进程调用了 recvfrom 这个系统调用, kernel 就开始了 IO 的第一个阶段:准备数据。对于 network IO 来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的 UDP 包)。这个时候 kernel 就要等待足够的数据到来。而在用户进程这边
标签:复制到,kernel,java,模型,IO,缓冲区,数据,Blocking 来源: https://blog.csdn.net/m0_65580904/article/details/122064134
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。