Linux网络I/O模型

一、用户空间I/O操作的两个阶段

1、等待数据准备阶段

此阶段主要是将数据先加载至内核空间(内存缓冲区)

2、数据从内核复制到进程的阶段

此阶段主要是将数据从内核空间(内存缓冲区)复制到用户空间中进程的内存中去

二、五种网络I/O模型

1、Blocking I/O,阻塞 I/O

2、Non-blocking I/O,非阻塞 I/O

3、I/O multiplexing,多路复用 I/O

4、Asynchronous I/O,异步 I/O

5、Single driven I/O,信号驱动 I/O

三、Blocking I/O,阻塞 I/O

process blocks in call to read

(用户空间)                         (内核空间)

wait for data : read (system call) --> no data ready --> data ready ==> blocking

(内核空间)                                      (用户空间)

copy data from kernel to user : copy data --> copy complete (return ok) -->  process data ==> blocking

四、Non-blocking I/O

process repeatedly calls read waiting for an OK (polling)

wait for data :

(用户空间)                (内核空间)

read (system call) --> no data ready

read <--                     (ewouldblock)  # 如果数据没有准备好,则立即返回一个error

read (system call) -->

read <--                     (ewouldblock)

read (system call) --> data ready ==> non-blocking

(内核空间)                                      (用户空间)

copy data from kernel to user : copy data --> copy complete (return ok) --> process data ==> blocking

五、I/O multiplexing

原文地址:http://blog.51cto.com/cjexd0826/2117721

时间: 2024-10-09 21:35:11

Linux网络I/O模型的相关文章

Linux网络I/O模型简介

一.I/O基础入门 java1.4之前的早期版本,java对I/O的支持并不完善,开发人员在开发高性能I/O程序的时候,会面临一些巨大的挑战和困难,主要问题如下. 1.没用数据缓冲区,I/O性能存在问题: 2.没有C或者C++中的Channel概念,只有输入和输出流: 3.同步阻塞式I/O通信(BIO),通常会导致通信线程被长时间阻塞: 4.支持字符集有限,硬件可移植性不好. 二.Linux网络I/O模型简介 Linux的内核讲所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供

嵌入式 Linux网络编程(三)——UDP编程模型

嵌入式 Linux网络编程(三)--UDP编程模型 UDP编程模型: UDP循环服务器模型为: socket(...); bind(...); while(1) {    recvfrom(...);    process(...);    sendto(...); } server.c代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #inc

嵌入式 Linux网络编程(二)——TCP编程模型

嵌入式 Linux网络编程(二)--TCP编程模型 一.TCP编程模型 TCP编程的一般模型如下图: TCP编程模型分为客户端和服务器端编程,两者编程流程如下: TCP服务器端编程流程: A.创建套接字: B.绑定套接字: C.设置套接字为监听模式,进入被动接受连接状态: D.接受请求,建立连接: E.读写数据: F.终止连接. TCP客户端编程流程: A.创建套接字: B.与远程服务器建立连接: C.读写数据: D.终止连接. 二.TCP迭代服务器编程模型 TCP循环服务器接受一个客户端的连接

linux网络IO模型——阻塞、非阻塞和同步、异步

最近几天在学习nginx的时候了解了一下linux网络IO模型,在此谈谈我自己的理解,如有错误请多多指教.本文参考书籍Richard Stevens的“UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ”,6.2节“I/O Models ”. Linux网络IO请求数据分为两段: 1.数据准备 2.将数据从内核拷贝到进程空间 其实,阻塞.非阻塞和同步.异步的不同就在于这两个阶段的不同. 同步和异步关

很全的linux网络编程技巧

注:作者王晓,本人认为总结得很好,故记之,绝无侵权之意. 1. LINUX网络编程基础知识 1 1.1. TCP/IP协议概述 1 1.2. OSI参考模型及TCP/IP参考模型 1 1.3. TCP协议 3 1.4. UDP协议 5 1.5. 协议的选择 6 2. 网络相关概念 6 2.1. socket概念 7 2.2. socket类型 8 2.3. socket信息数据结构 8 2.4. 数据存储优先顺序的转换 8 2.5. 地址格式转化 9 2.6. 名字地址转化 10 3. sock

网络服务器架构模型与比较

事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用:事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序.ftp 服务器程序等.相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率. 关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥于源代码的陈列与分析,而侧重模型的介绍和比较.使用 libev 事件驱动库的服务器模型将给出实现代码. 本文涉及

Linux网络性能优化方法简析

Linux网络性能优化方法简析 2010-12-20 10:56 赵军 IBMDW 字号:T | T 性能问题永远是永恒的主题之一,而Linux在网络性能方面的优势则显而易见,这篇文章是对于Linux内核中提升网络性能的一些优化方法的简析,以让我们去后台看看魔术师表演用的盒子,同时也看看内核极客们是怎样灵活的,渐进的去解决这些实际的问题. AD:2014WOT全球软件技术峰会北京站 课程视频发布 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性

Java 网络I/O模型

网络I/O模型 人多了,就会有问题.web刚出现的时候,光顾的人很少.近年来网络应用规模逐渐扩大,应用的架构也需要随之改变.C10k的问题,让工程师们需要思考服务的性能与应用的并发能力. 网络应用需要处理的无非就是两大类问题,网络I/O,数据计算.相对于后者,网络I/O的延迟,给应用带来的性能瓶颈大于后者.网络I/O的模型大致有如下几种: 同步模型(synchronous I/O) 阻塞I/O(bloking I/O) 非阻塞I/O(non-blocking I/O) 多路复用I/O(multi

四种主要网络IO虚拟化模型

本文主要为大家简要介绍VMware.Redhat.Citrix.Microsoft主要虚拟化厂商使用的4种主要的虚拟化IO模型 (emulation.para-virtualization.pass-through.SR-IOV).主要为大家穿针引线,信息量比较大,组织排 版有限,看官们将就点看着. 网络I/O不但是物理服务器最容易出现的瓶颈,也是现在虚拟化技术最大的硬伤.随着硬件虚拟化对网络I/O的支持,虚拟化的网络I/O模型也不断的 进化,虚拟化的I/O性能也不断提升.今天给大家分享VMwa