6 io

cathy_mu

一个进程地址空间分为用户空间user space和内核空间kernel space。

应用程序运行在用户空间。内核空间进行系统态级别的资源有关的操作,比如文件管理,进程通信,内存管理。

用户空间的程序不能直接访问内核空间,想执行io操作的时候,只能发起系统调用(io调用)请求操作系统的内核来执行io操作。

应用程序发起io调用后,1.内核等待io设备准备好数据 2.内核将数据从内核空间拷贝到用户空间。

5种常见io模型 同步阻塞io 同步非阻塞io io多路复用 信号驱动io 异步io
同步非阻塞:
内核准备数据、数据就绪时反复调用read,不阻塞。拷贝数据时阻塞。
轮询十分消耗cpu资源。

java中常见的三种io
bio blocking io
属于同步阻塞io,应用程序发起read调用后,会一直阻塞,直到内核把数据拷贝到用户空间。
nio non-blocking io
属于io多路复用,线程先发起select调用,询问内核数据是否准备就绪,等内核把数据准备好了,用户线程再发起read调用。read调用的过程还是阻塞的。
目前支持 IO 多路复用的系统调用,有 select,epoll 等等。
IO 多路复用模型,通过减少无效的系统调用,减少了对 CPU 资源的消耗。
Java 中的 NIO ,有一个非常重要的选择器 ( Selector ) 的概念,也可以被称为 多路复用器。通过它,只需要一个线程便可以管理多个客户端连接。当客户端数据到了之后,才会为其服务。

AIO (Asynchronous I/O)
就是 NIO 2,是异步 IO 模型,基于事件和回调机制实现,应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

阅读 231
15 声望
1 粉丝
0 条评论
你知道吗?

15 声望
1 粉丝
宣传栏