IO和零拷贝
I/O介绍
I/O模型
I/O模型分类:
一:阻塞I/O模型:在等待数据和数据复制两个阶段都处于阻塞状态

非阻塞IO模型:在等待数据和数据复制两个阶段都处于阻塞状态

IO多路复用模型:最常用

信号驱动IO:signal-driven I/O

异步IO模型

五种I/O模型对比

I/O模型的具体实现
select/poll/epoll
1、三种实现方式的对比。
①三种都是I/O多路复用模型的是实现
②epoll在等待数据阶段,使用了信号驱动的特性IO效率高。才使得nginx支持高并发。

零拷贝
传统Linux中 I/O 的问题
什么是零拷贝
原始数据拷贝:
一次网络或者磁盘io需要先从磁盘获取数据到内核的缓存区,再拷贝到用户空间的缓冲区。这是一次完成的磁盘IO。用户空间程序处理后,构建相应报文,回复客户端。这也要经过context切换和复制。

MMAP:Memory Mapping
数据到达内核的缓存后不会,复制到用户空间的缓存。而是通过内存映射,告诉user数据的位置。减少了内核空间数据向用户空间的复制,直接再内核的内存区域中复制到socket缓存,发送给客户端。

SENDFILE:直接再内核空间内复制数据,相应请求

DMA 辅助的 SENDFILE,省去了kerner 缓存到socket缓存的复制。

IO和零拷贝的更多相关文章
- 操作系统IO之零拷贝技术
磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝.直接 I/O.异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统 ...
- 直接IO 零拷贝 DAM 自缓存应用程序
直接IO 零拷贝 DAM 自缓存应用程序
- 深入剖析Linux IO原理和几种零拷贝机制的实现
深入剖析Linux IO原理和几种零拷贝机制的实现 来源 https://zhuanlan.zhihu.com/p/83398714 零壹技术栈 公众号[零壹技术栈] 前言 零拷贝(Zero ...
- 传统IO拷贝与零拷贝技术比较
1. 传统IO 由上面图知,传统io需要经过4次copy, 3次状态切换 第一次: 从硬盘 经过 DMA 拷贝 到 kernel buffer (内核buferr) 第二次: 从kernel buff ...
- Linux零拷贝技术 直接 io
Linux零拷贝技术 .https://kknews.cc/code/2yeazxe.html https://zhuanlan.zhihu.com/p/76640160 https://clou ...
- NIO学习笔记,从Linux IO演化模型到Netty—— Netty零拷贝
Netty的中零拷贝与上述零拷贝是不一样的,它并不是系统层面上的零拷贝,只是相对于ByteBuf而言的,更多的是偏向于数据操作优化这样的概念. Netty中的零拷贝: 1.CompositeByteB ...
- NIO学习笔记,从Linux IO演化模型到Netty—— Java NIO零拷贝
同样只是大致上的认识. 其中,当使用transferFrom,transferTo的时候用的sendfile(). 如果系统内核不支持 sendfile,进一步执行 transferToTrusted ...
- NIO学习笔记,从Linux IO演化模型到Netty—— Linux零拷贝
这里只是感性地认识Linux零拷贝,不涉及具体细节. 1.Linux传统的数据拷贝 用户进程是不能直接访问文件系统的,要先切换到内核态,发起系统调用,DMA把磁盘中的数据写入内核空间,内核再把数据拷贝 ...
- Linux 零拷贝技术
简介 零拷贝(zero-copy)技术可以减少数据拷贝和共享总线操作的次数,消除通信数据在存储器之间不必要的中间拷贝过程,有效地提高通信效率,是设计高速接口通道.实现高速服务器和路由器的关键技术之一. ...
随机推荐
- 福昕foxit phantom pdf高级编辑器企业版10.1 pro安装破解教程
本文提供福昕foxit phantom pdf高级编辑器企业版10.1的安装教程.pj教程,可以使用全部功能,注意的是此方法对个人版无效. 没有必要再尝试别的文章,仅看这一篇即可!别的文章亲测是通过修 ...
- bootstrap table记录一下
$(function() { // 刷新 talbe function refresh() { $("#table").bootstrapTable('refresh'); } $ ...
- kivy中文编程指南
Kivy中文编程指南,由网友翻译后,我整理目录及页面形式,便了浏览查阅. 点击下载
- linux对拍
转自 hzoi-fengwu :https://www.cnblogs.com/hzoi-fengwu/p/14872962.html 1 #include<bits/stdc++.h> ...
- Lambda--Optional、Collectors高级进阶方法
Lambda--Collectors.optional高级使用 偶然看到了同事groupingBy用法,然后百度衍生出了optional,collectors,map等各种用法.突然发现自己之前写的代 ...
- 建立安全SSL连接PostgreSQL数据库服务器
建立安全SSL连接PostgreSQL数据库服务器当前物联网的挑战之一就是提供最高的安全级别.这就是为什么需要开启SSL连接到 PostgreSQL. 当你想要安全的存储数据到PostgreSQL数据 ...
- C# WinForm 数据库连接及对数据库的相关操作
1.首先在App.config配置文件中配置数据库连接字符串: <appSettings> <add key="connectionstring" value=& ...
- Java面向对象14——接口
接口 package oop.demon01.demon09; //抽象思维~Java //interface 定义的关键字 , 接口都需要有实现类 public interface Use ...
- LeetCode通关:哈希表六连,这个还真有点简单
精品刷题路线参考: https://github.com/youngyangyang04/leetcode-master https://github.com/chefyuan/algorithm-b ...
- Spring Boot 入门系列(二十二)使用Swagger2构建 RESTful API文档
前面介绍了如何Spring Boot 快速打造Restful API 接口,也介绍了如何优雅的实现 Api 版本控制,不清楚的可以看我之前的文章:https://www.cnblogs.com/zha ...