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 模型,基于事件和回调机制实现,应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

15 声望
1 粉丝
0 条评论
推荐阅读
提问题
1.有没有培训和学城2.女员工数量

cathy_mu阅读 536

PHP转Go实践:xjson解析神器「开源工具集」
我和劲仔都是PHP转Go,身边越来越多做PHP的朋友也逐渐在用Go进行重构,重构过程中,会发现php的json解析操作(系列化与反序列化)是真的香,弱类型语言的各种隐式类型转换,很大程度的减低了程序的复杂度。

王中阳Go9阅读 1.6k评论 2

封面图
与RabbitMQ有关的一些知识
工作中用过一段时间的Kafka,不过主要还是RabbitMQ用的多一些。今天主要来讲讲与RabbitMQ相关的一些知识。一些基本概念,以及实际使用场景及一些注意事项。

lpe2348阅读 1.9k

封面图
万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...

JavaGuide4阅读 524

封面图
Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...

王中阳Go5阅读 2.1k评论 2

封面图
Redis 发布订阅模式:原理拆解并实现一个消息队列
“65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?““那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆宣传,暴击单身狗。”像这种 65 哥通过朋...

码哥字节6阅读 1.4k

封面图
计算机网络连环炮40问
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~

程序员大彬6阅读 794

15 声望
1 粉丝
宣传栏