`
iunknown
  • 浏览: 410052 次
社区版块
存档分类
最新评论

epoll 摘要

阅读更多
http://blog.csdn.net/umbrella1984/archive/2006/10/06/1322890.aspx

epoll的使用

令人高兴的是,2.6内核的epoll比其2.5开发版本的/dev/epoll简洁了许多,所以,大部分情况下,强大的东西往往是简单的。唯一有点麻烦是epoll有2种工作方式:LT和ET。

LT(level triggered)是缺省的工作方式,并且同时支持block和no-block socket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你 的,所以,这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的代表.

ET (edge-triggered)是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述 符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了(比如,你在发送,接收或者接收请求,或者发送接收的数据少于一定量时导致 了一个EWOULDBLOCK 错误)。但是请注意,如果一直不对这个fd作IO操作(从而导致它再次变成未就绪),内核不会发送更多的通知(only once),不过在TCP协议中,ET模式的加速效用仍需要更多的benchmark确认。

http://blog.csdn.net/sodme/archive/2006/02/15/599132.aspx

那么,epoll和iocp到底又有什么不同呢?

以我目前粗浅的使用经验来看,至少可以得到以下结论:

1.iocp是在IO操作完成之后,才通过get函数返回这个完成通知的;而epoll则不是在IO操作完成之后才通知你,它的工作原理是,你如果想进行IO操作时,先向epoll查询是否可读或可写,如果处于可读或可写状态后,epoll会通过epoll_wait函数通知你,此时你再进行进一步的recv或send操作。

2. 在1的基础上,我们其实可以看到,epoll仅仅是一个异步事件的通知机制,其本身并不作任何的IO读写操作,它只负责告诉你是不是可以读或可以写了,而 具体的读写操作,还要应用层自己来作;但iocp的封装就要多一些,它不仅会有完成之后的事件通知,更重要的是,它同时封装了一部分的IO控制逻辑。从这 一点上来看,iocp的封装似乎更全面一点,但是,换个角度看,epoll仅提供这种机制也是非常好的,它保持了事件通知与IO操作之间彼此的独立性,使 得epoll的使用更加灵活。

http://www.kegel.com/c10k.html#strategies

Use nonblocking calls (e.g. write() on a socket set to O_NONBLOCK) to start I/O, and readiness notification (e.g. poll() or /dev/poll) to know when it's OK to start the next I/O on that channel. Generally only usable with network I/O, not disk I/O.

http://monkeymail.org/archives/libevent-users/2005-September/000012.html

>> As a workaround, you could possibly forward long-during synchronous
>> actions (in a nonblocking-way) to a pipe with a thread(-pool) behind it.
>> The thread(s) could "signal" the completion of the synchronous action
>> through another pipe that is registered within the libevent-context.
>> This way you require only a single lib-event-context while being able to
>> handle long-during synchronous actions.

>This is a pretty good idea. That way the event notification can come
>through the main libevent loop.
分享到:
评论

相关推荐

    Linux系统下,使用“epoll+线程池”技术,通过makefile管理的简单项目-“服务器与客户端完成通信并处理小型业务”

    内容摘要:使用“epoll+线程池”技术,通过makefile管理的简单项目——“服务器与客户端完成通信并处理小型业务” 技术涉及:网络初始化、epoll模型、线程池、线程同步、互斥锁 适用人群:在校大学生,并对网络通信...

    14-广播-组播-本地套接字.pdf

    网络编程基础知识点总结 本资源摘要信息涵盖了网络编程的基础知识点,涉及到广播、组...本资源摘要信息涵盖了网络编程的基础知识点,涉及到套接字编程、epoll编程、广播编程、组播编程、网络协议基础和其他网络概念。

    适用于Linux epoll()系列API的轻量级事件循环库-C/C++开发

    libuEv | 适用于Linux的简单事件循环简介API创建事件上下文...简介libuEv是一个小事件循环,包装了Linux epoll()API系列。 它类似于更成熟的libevent,libev和古老的Xt(3)事件循环。 名称中的µ表示其有限的功能s

    linux系统下nginx高连接并发控制机制研究.pdf

    【摘要】:Nginx是一款基于Linux操作系统设计的高效Web服务器,以其强大的高并发连接处理能力而备受青睐。它利用Linux内核的epoll事件模型来实现高效的并发控制,确保在大量用户访问时保持系统的稳定性和效率。本文...

    1、丰巢科技(51问)1

    【内容摘要】:本话题主要探讨了三种不同的I/O模型——BIO、NIO和AIO,以及它们的工作原理和区别。此外,还提到了Java中的IO多路复用技术,如select、poll和epoll,以及ZooKeeper的工作原理和在分布式系统中的应用。...

    nginx-comment:nginx-1.10.0源码分析及注解,注解摘要链接:

    另外,添加一个文档目录,主要是用于存放自己在学习源码过程中学到的一些东西,链接上次关于slab的一个摘要文档也进行了上传。 2016-07-13这次主要是完成了Nginx启动流程以及master和worker进程工作流程的注解。 ...

    TinyServerPlatform:个人小型服务端框架,学习用

    目前已实现服务器:监听服务器端口,创建新连接事件:统一事件源(目前实现理解事件) Epoller:利用事件对Epoll进行封装线程池:使用优先级别实现带优先级的线程池客户:使用Epoll监听输入fd,向指定服务器发送消息...

    黄先生-嵌入式开发-2年_网络公司it人员简历_程序员简历模板_计算机相关专业.pdf

    本资源摘要信息主要关注于嵌入式开发领域的技术知识点,涵盖了嵌入式软件开发、Linux系统、网络编程、数据库操作、多进程和多线程编程、文件IO操作、嵌入式Linux程序移植、字符设备框架、platform框架、sysfs子系统...

    较全的二叉排序树程序

    同步套接字通过`select`、`poll`或`epoll`等函数阻塞等待网络事件,而异步套接字则使用消息驱动,不需要主动轮询。 在"二叉排序树各种算法汇总"这个主题中,你可以期待看到不同类型的二叉排序树操作的实现,包括但...

    2019 秋招腾讯 C++面试经验(1).pdf

    31. **数据安全**:涉及加密、完整性校验,如MD5用于消息摘要,防止数据篡改。 32. **HR面试**:涉及个人背景、学习经历、决策原因、团队协作能力和个人价值观。 这次面试全面考察了应聘者的理论知识、实践经验...

    腾讯面经,记录面试全过程

    本资源摘要信息涵盖了腾讯面经的知识点总结,包括非技术篇、技术篇和腾讯的群面面经三个部分。 非技术篇: 1. 微信支付反欺诈策略:微信支付可以通过实名认证、身份验证、交易限额等方式来减少欺诈现象。 2. 小...

    Golang后端面试_20200327.docx

    本资源摘要信息涵盖了 Golang 后端面试的多个方面,包括算法、数据结构、Golang 语言、Redis、MySQL、消息队列、框架、网络及操作系统等。 算法 * 斐波那契数列 * 判断链表是否闭环 * 差集放到一个数组中 * 从 n ...

    ss5 3.8.5源代码

    源代码中的线程管理和事件驱动模型(如epoll、kqueue等)的实现,展示了如何高效地处理大量并发请求,以保证服务的稳定性和性能。 6. **配置文件解析**:SS5支持通过配置文件进行参数设置,源代码中包含了读取和...

    java面试题.pdf

    Java 面试题 Java 是一门面向对象的编程语言,广泛应用于 Android 应用开发、Web ...本资源摘要信息总结了 Java 面试题的主要内容,涵盖了 Java 基础、Java 集合框架、Java 并发、Java Web 和数据库等方面的知识点。

    The Reverse C10K Problem for Server-Side Mashups.pdf

    #### 摘要与背景 本文探讨了反向C10K问题(RC10K)在服务器端Mashup中的处理方法。传统的C10K问题是研究如何使用普通的Web服务器为10,000个同时连接或HTTP请求提供合理的服务。而反向C10K问题则是关注如何在一个Web...

    jetty9.4.6 2017最新 免费下载

    8. **安全性**:虽然在这个列表中没有直接列出,但Jetty还提供了安全模块,如jetty-security,支持基本认证、摘要认证以及SSL/TLS加密。 9. **性能优化**:Jetty 9.4.6版本优化了内存管理和线程模型,提高了并发...

    C-S文件传输C语言源代码

    6. **数据分块和校验**:为了提高效率和确保数据完整性,文件通常被分割成多个数据块进行传输,并在传输过程中计算校验和,如CRC(循环冗余校验)或MD5(消息摘要算法5)。 7. **安全考虑**:在实际应用中,文件...

    Squid代理配置[参考].pdf

    配置参数包括设置安装路径、man手册路径、启用或禁用特定功能,如异步IO、延迟池、缓存摘要、SNMP支持、Epoll模式等。 2. **编译和安装**: 使用`make`和`make install`命令进行编译和安装。这将生成Squid可执行...

    UNIX环境高级编程(中文第三版)--高清版

    尽管部分内容链接重复且未提供具体章节或摘要,我们仍可以根据书名、描述和标签来概述这本书可能涉及的一些关键知识点。 ### 1. UNIX系统简介 - **历史背景**:UNIX操作系统自20世纪70年代初由AT&T贝尔实验室开发...

    jetty-util-9.4.0.M0.zip

    3. **异步I/O**:支持NIO(非阻塞I/O)和EPOLL(在Linux系统上的高效I/O)模型,提高服务端的并发处理能力。 4. **连接器(Connectors)**:Jetty提供多种类型的连接器,如`ServerSocketChannel`和`SocketChannel`,...

Global site tag (gtag.js) - Google Analytics