![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
中间件底层专题
文章平均质量分 85
莫言静好、
这个作者很懒,什么都没留下…
展开
-
Linux 零拷贝方案
一 什么是零拷贝(zero copy)? 零拷贝有什么优点?1.1 什么是零拷贝?零拷贝: 指的是在I/O过程中,用户空间和内核空间不需要进行CPU数据拷贝。零拷贝并不是指I/O过程中一次拷贝都没有发生。传统的I/O读的时候,需要将内核缓冲区的数据拷贝到用户空间的缓冲区;传统I/O写的时候,需要将用户空间缓冲区数据拷贝到内核缓冲区。但是零拷贝就是避免了这种拷贝操作,提升了I/O性能。比如我们读取磁盘数据,然后写入网卡为例,按照传统I/O的工作方式如图所示:从上图我们可以看到,总共发生了4次内核态集原创 2021-04-14 17:02:16 · 296 阅读 · 1 评论 -
2021-04-13 Linux I/O模型
一 什么是同步,什么是异步?同步指的是发起I/O请求后,必须等待I/O响应,从内核缓冲区获取到数据,程序才能继续往下执行异步指的是发起I/O请求后,无需等待I/O响应,程序继续往下执行,如果内核缓冲区数据准备好了则通知用户进程或者执行注册的回调函数二 什么是阻塞,什么是非阻塞?阻塞指的是I/O请求时,内核缓冲区没有数据,则需要阻塞等待数据准备好。注意这里也并不是一直阻塞,CPU时间分片到了,则会把请求放入到一个等待队列,然后去执行其他线程了,等待数据返回,触发中断,然后中断处理程序会将该线程移到运行原创 2021-04-13 18:35:39 · 140 阅读 · 0 评论 -
Reactor线程模型
一 传统阻塞线程模型第一:服务器端有一个Acceptor线程接收客户端请求第二:Acceptor接收到每一个客户端请求后,为每一个线程分配一个线程处理客户端请求缺点:第一:当数据量很大或者客户端很多的时候,就会创建大量的线程对象第二:连接建立后,没有数据可读,会一直处于阻塞状态二 Reactor单线程模型第一:Reactor对象通过Selector(多路复用器)监控客户端请求事件第二: 收到事件后,进行分发第三:如果是建立连接的事件则交给Acceptor,通过accept处理连接请求,原创 2021-04-12 16:23:50 · 291 阅读 · 0 评论 -
文件内存映射和传统I/O机制
一 页高速缓存(页缓存)?1.1 什么是页高速缓存(page cache)? 为什么需要页高速缓存?1.1.1 什么是页高速缓存?页高速缓存,也就是我们经常说的page cache,它是Linux操作系统实现的针对磁盘的一种缓存,通过把磁盘的数据缓存到物理内存,把对磁盘的访问转化为对物理内存的访问。页缓存可以减少内核对磁盘的I/O操作,提升I/O性能。1.1.2 为什么需要页高速缓存?1.1.2.1 内存和磁盘的速度差异因为读取内存的速度远快于读取磁盘的速度,所以从内存访问数据比从磁盘读数据快原创 2021-04-11 18:54:34 · 1375 阅读 · 1 评论 -
磁盘读写流程和网络读写流程
一 页缓存(page cache) 和 套接字缓冲区(socket buffer)1.1 页缓存(page cache)1.1.1 什么是页缓存? 为什么需要页缓存?当应用程序要读取磁盘上的文件的时候,首先需要CPU将磁盘上的文件内容拷贝到主存中,然后我们再从主存中读取文件内容。但是,我们知道从磁盘属于慢速设备,主存属于高速设备,从磁盘传输数据到主存是比较慢的,所以为了均衡这种速度差,就有了类似于CPU 高速缓存一样的东西,叫做页缓存。页缓存,它是利用主存的空闲部分来缓存一些数据块的,也就是页缓存中原创 2021-04-07 00:05:55 · 5755 阅读 · 1 评论