6 io
Posted cathy_mu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6 io相关的知识,希望对你有一定的参考价值。
一个进程的地址空间分为用户空间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 模型,基于事件和回调机制实现,应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。
以上是关于6 io的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的弹出框在 iPhone 6 Plus 上的 iOS 8.1 中崩溃? iOS 8 工作(实际上是 Xcode 6.0 到 6.1 的错误)