`

IO多路复用-个人理解

阅读更多
作者:王伟豪
链接:http://www.zhihu.com/question/32163005/answer/55111082
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

简单的说下自己的理解
io分为磁盘io和网络io,这里说的是网络io。我们知道计算机之间传输数据是流传输。一台计算机网络io只会有一个。

这里说单进程
在最基本的c/s demo中,send/recv就是在一条io通道收发数据,这就是基本的网络io,但是这种操作是不能“填满”io的,也就是说大部分io资源你没有用,仅仅有一个io操作,当然你可以开多进程或多线程,代价可想而知

此时出现了io多路复用,自己的话翻译一下,复用网络io从而有多个io操作能在网络io中执行。

linux下网络io使用socket套接字来通信,普通io模型只能监听一个socket,而io多路复用可同时监听多个socket

io多路复用避免阻塞在io上,原本为多进程或多线程来接收多个连接的消息变为单进程或单线程保存多个socket的状态后轮询处理

实现io多路复用需要函数来支持,就是你说的linux下的select/poll,epoll以及win下 iocp 和 BSD 的 kqueue

至于它们有什么区别,网上有很多了。
如果楼主看不懂它们的区别,建议查查资料或者看看apue或unp的相关章节弥补一下不理解的部分。

简单说epoll和select/poll最大区别是
1.epoll内部使用了mmap共享了用户和内核的部分空间,避免了数据的来回拷贝
2.epoll基于事件驱动,epoll_ctl注册事件并注册callback回调函数,epoll_wait只返回发生的事件避免了像select和poll对事件的整个轮寻操作。

nginx中使用了epoll,是基于事件驱动模型的,由一个或多个事件收集器来收集或者分发事件,epoll就属于事件驱动模型的事件收集器,将注册过的事件中发生的事件收集起来,master进程负责管理worker进程
分享到:
评论

相关推荐

    io多路复用服务器-聊天室.zip

    【标题】"io多路复用服务器-聊天室"指的是一个使用Python编程语言构建的服务器,它基于IO多路复用技术实现,可以处理多个客户端连接请求,用于创建一个聊天室应用。IO多路复用是一种高效的服务端设计模式,通过监听...

    IO多路复用实现TCPecho

    在IT领域,IO多路复用是一种高效地管理多个并发连接的技术,尤其在服务器端编程中,它能显著提升系统资源利用率和响应速度。本文将深入探讨如何利用IO多路复用来实现一个TCP echo服务器,该服务器运行在Linux环境下...

    windows下多路复用IO(select,WSAAsyncSelect,WSAEventSelect)

    在Windows操作系统中,多路复用I/O(Multiplexed Input/Output)是一种高效地管理多个网络连接的技术,它允许程序同时处理多个套接字事件,而无需为每个连接创建单独的线程或进程。本篇文章将深入探讨三种在Windows...

    IO多路复用之poll实例

    在计算机编程领域,IO多路复用是一种高效地管理多个输入/输出(I/O)操作的技术,它允许程序同时等待多个文件描述符的事件。在Linux系统中,`poll`函数是实现IO多路复用的一种方法。在这个“IO多路复用之poll实例”...

    IO多路复用之select实例

    **IO多路复用之select实例详解** IO多路复用是一种高效的系统调用机制,它允许单个进程同时监控多个文件描述符(file descriptor),等待它们中的任意一个或多个准备就绪,以便进行读写操作。在Unix/Linux系统中,...

    IO多路复用.md

    通过对同步与异步、阻塞与非阻塞的概念理解,以及对IO多路复用原理的分析,我们可以看到IO多路复用技术在处理大量并发连接方面具有显著的优势。无论是传统的select/poll还是现代的epoll,都能够有效地提高服务器的...

    io多路复用c语言版简单http服务器demo

    IO多路复用是一种操作系统提供的机制,允许单个进程监视多个文件描述符(例如,套接字),等待数据到达或可写入。在C语言中,通常使用`select`或`poll`系统调用来实现。在这个HTTP服务器中,`select`被用来监听...

    IO多路复用图解1

    在计算机编程领域,IO多路复用是一种提高服务器性能的技术,尤其在处理大量并发连接时。该技术的主要目的是通过一个单独的线程或进程来管理多个IO操作,从而避免为每个连接创建单独的线程或进程,这样可以节省资源并...

    多进程&多路复用并发的http服务器

    理解并掌握多进程和多路复用并发的概念对于构建高性能HTTP服务器至关重要。Nginx的成功在于其巧妙地结合了多路复用和事件驱动模型,实现了高效、低延迟的并发处理。通过深入研究和实践,我们可以为自己的HTTP服务器...

    基于TCP协议分别使用多线程、IO 多路复用的方法实现多人聊天室(python).zip

    下面我们将详细探讨TCP协议、多线程和IO多路复用等关键知识点。 首先,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保数据包按照发送顺序正确无误地到达目的地,通过三次握手...

    多路复用IO以及TCP并发服务器的实现(练习)

    首先,让我们来理解"多路复用IO"。IO复用是一种操作系统提供的功能,允许单个进程监控多个文件描述符(如套接字)的状态,而无需为每个文件描述符创建单独的线程或进程。这种方法提高了资源利用率,减少了上下文切换...

    python io多路复用聊天室.rar

    首先,让我们理解IO多路复用的基本原理。在传统的网络编程中,我们通常为每个连接创建一个新的线程或进程,以便同时处理多个客户端的请求。然而,这种方法在处理大量并发连接时可能会消耗大量的系统资源。IO多路复用...

    IO多路复用之epoll全面总结(必看篇)

    IO多路复用技术在高并发服务器编程中扮演着至关重要的角色,因为它允许单个线程同时处理多个连接。在Linux系统中,epoll是针对IO多路复用的一种高效实现,尤其适用于大规模并发连接的场景。以下是关于epoll的详细...

    IO多路复用之epoll实例

    **IO多路复用之epoll实例** IO多路复用是一种高效的系统调用机制,允许单个进程监视多个文件描述符,等待数据就绪,而无需为每个描述符创建单独的线程或轮询。在Linux系统中,epoll是实现IO多路复用的一种高效方法...

    多路IO复用并发服务器模型

    3. **I/O多路复用**:利用`select`、`poll`或`epoll`等函数,可以同时监控多个文件描述符的状态,当某个描述符准备好时,才会进行下一步操作。 4. **信号驱动I/O**:使用信号来通知进程I/O事件的发生,通常用于非...

    网络io与io多路复用select/poll/epoll 服务器并发代码实现

    总的来说,理解并熟练运用网络I/O和I/O多路复用技术,对于构建高性能的网络服务至关重要。无论是select、poll还是epoll,它们都是为了提高服务器并发处理能力,优化系统资源的使用,从而提升整体系统的效率和稳定性...

    多路复用模拟IIC程序

    通过阅读和理解这些代码,开发者可以学习如何在STM32平台上实现多路复用模拟IIC,以便在实际项目中应用。 总之,多路复用模拟IIC程序是STM32开发中的一个重要实践,它利用了STM32的GPIO多路复用能力和软件模拟技术...

    电子词典查询业务,c语言数据库,tcp服务器以及epoll IO多路复用的网络编程项目

    这个项目的核心在于理解和应用TCP服务器、数据库管理和IO多路复用技术,特别是epoll模型,来提高系统的效率和并发处理能力。 首先,让我们深入理解TCP服务器。TCP(Transmission Control Protocol)是一种面向连接...

    多路IO复用-epoll,通过epoll实现事件通知,实现了水平(阻塞),边缘(非阻塞)触发

    `epoll`是Linux系统提供的一种I/O复用机制,它是I/O多路复用技术的一种优化实现,特别是在高并发场景下表现优秀。本篇将深入探讨`epoll`的工作原理、两种触发模式以及其在实际应用中的价值。 首先,理解`epoll`的...

    单线程多路复用(异步通信)

    - 理解I/O多路复用技术的基本原理及其在服务器编程中的应用。 - 掌握基于单线程并发模型下的服务器程序设计及实现。 #### 实验环境配置 - 操作系统:Ubuntu 8.04 #### I/O多路复用技术概览 I/O多路复用技术是一...

Global site tag (gtag.js) - Google Analytics