![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
IO模型
IO模型讲解及IO多路复用讲解
Drogon Brother
这条路 我并不寂寞
展开
-
用户空间和内核空间
1、用户空间和内核空间学习Linux时,经常看到两个词:User space(用户空间),Kernel space(内核空间)。简单的说,Kernel space是Linux内核运行的空间,User space是用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。虚拟内存被操作系统分为两块:内核空间和用户空间,内核空间是内核代码运行的地方,用户空间是...原创 2019-09-13 11:07:25 · 489 阅读 · 0 评论 -
漫谈4种IO模型
9、漫谈4种IO模型9.1 高性能IO模型浅析 服务端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型; (2)同步非阻塞IO(Non Blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意:这里所说的NIO并非j...原创 2019-09-17 12:50:05 · 389 阅读 · 0 评论 -
IO设计模式之Reactor和Proactor模式
8、IO设计模式之Reactor和Proactor8.1 反应器Reactor模式8.1.1 概述 反应器模式(Reactor Pattern)是一种为处理并发服务请求并将请求提交到一个或者多个服务处理程序的事件设计模式。当客户端请求到达时,服务处理程序使用多路分配策略,由一个非阻塞线程来接收所有请求,然后派发这些请求至相关的工作线程进行处理。 Reacto...原创 2019-09-15 15:37:44 · 412 阅读 · 0 评论 -
阻塞IO和非阻塞IO
7、阻塞IO和非阻塞IO 阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。 阻塞IO和非阻塞IO指的是用户空间和内核空间的IO操作: 阻塞IO:用户空间通过系统调用(systemcall)和内核空间发送IO操作时,该调用时需要等待; 非阻塞IO:用户空间通过系统调用(sys...原创 2019-09-13 19:23:17 · 555 阅读 · 0 评论 -
同步IO和异步IO
6、同步IO和异步IO 同步和异步是针对应用程序和内核交互而言,同步是指用户出发IO操作并等待或者轮询的去查看IO操作是否就绪;而异步是指用户进程出发IO操作以后便开始做自己的事情,而当IO操作完成后,会异步通知用户进程。 同步IO和异步IO指的是用户空间和内核空间数据交互的方式: 同步IO:用户空间需要的数据,必须要等到内核空间给它之后...原创 2019-09-13 19:20:34 · 264 阅读 · 0 评论 -
Socket网络编程
5、Socket网络编程5.1 客户端5.1.1 SocketClientpackage com.pingan.maam.server.socket;import java.io.IOException;import java.io.OutputStream;import java.net.Socket;public class SocketClient { pu...原创 2019-09-13 19:13:03 · 351 阅读 · 0 评论 -
磁盘IO和网络IO
4、IO访问方式4.1 磁盘IO具体步骤: 当应用程序调用read接口时,操作系统检查内核缓冲区中是否存在需要的数据,如果存在,就直接从内核缓存中直接返回,否则从磁盘中读取,然后缓存至操作系统的缓存中。 当应用程序调用write接口时,将数据直接从用户地址空间复制到内核地址空间的缓存中,这时对用户程序来说,写操作已经完成了,至于什么时候写入磁盘中,...原创 2019-09-13 16:12:57 · 5001 阅读 · 2 评论 -
缓存IO和直接IO
3、缓存IO和直接IO缓存IO:数据先从磁盘通过DMA copy到内核空间,再从内核空间copy到用户空间。直接IO:数据直接从磁盘通过DMA copy到用户空间。3.1 缓存IO 缓存IO又被称为标准的I/O,大多数文件系统的默认I/O操作都是缓存IO。在Linux的缓存I/O机制中,数据先从磁盘复制到内核空间的缓冲区,然后再从内核空间的缓冲区复制到应用程序的地...原创 2019-09-13 11:26:40 · 2614 阅读 · 0 评论 -
PIO(编程输入/输出模型)和DAM(直接访问内存)
2、PIO(编程输入/输出模型)和DAM(直接访问内存) 有必要简单地说下慢速I/O与内存之间的传输方式。PIO:我们拿磁盘来说,很早之前,磁盘和内存之间的数据传输是需要CPU控制的,也就是说,如果我们读取磁盘文件到内存中,数据时需要经过CPU存储转发,这种方式称为PIO。显然这种方式是不合理的,因为它需要占用大量的CPU时间来读取文件,造成文件访问时系统几乎停止响应。...原创 2019-09-13 11:12:02 · 1759 阅读 · 0 评论 -
Redis IO多路复用技术及epoll实现原理
10、Redis IO多路复用技术以及epoll实现原理 Redis是一个单线程的但性能是非常好的内存数据库,主要用来作为缓存系统。Redis采用网络IO多路复用技术来保证在多连接的时候,系统吞吐量高。10.1 为什么Redis要使用IO多路复用 首先,Redis是跑在单线程中的,所有的操作都是顺序线性执行的,但是由于读写操作等待用户输入或者输出都是阻塞的,所以...原创 2019-09-17 22:38:39 · 4853 阅读 · 0 评论