本文译自what's the difference between libev and libevent? 作者是libev作者

[问]两个库都是为异步io调度而设计,在Linux上都是使用epoll机制,在FreeBSD上则都是kqueue,还有诸如此类的很多相通之处。

除了这些表面上的差别外,其实这两者根本的区别在哪里呢?比如架构上,或者设计哲学上。

[答]就设计哲学来说,libev的诞生,是为了修复libevent设计上的一些错误决策。例如,全局变量的使用,让libevent很难在多线程环境中使用。watcher结构体很大,因为它们包含了I/O,定时器和信号处理器。额外的组件如HTTP和DNS服务器,因为拙劣的实现品质和安全问题而备受折磨。定时器不精确,而且无法很好地处理时间跳变。

libev试图改进所有这些缺陷,例如避免使用全局变量,转而在所有函数中,使用上下文变量来代替。每个事件类型,使用单独的watcher类型(一个I/O watcher在64位机器上,只需要56字节。而libevent需要136字节)。允许额外的事件类型,例如基于挂钟的计时器,或者单调时间,线程内中断,准备并检查watchers来嵌入其他事件循环,或者被用于其他事件循环来嵌入。

额外组件的问题,是通过直接去掉额外组件来解决的,这样libev就可以小而美,快速高效了。但你也需要从其他地方寻找http库。因为libev没有带上。(例如,有一个库叫libeio,可以完成异步IO的工作,也可以和libev配合使用)。

总而言之,libev试图做好一件事而已(目标是成为POSIX的事件库),这是最高效的方法。libevent则尝试给你全套解决方案(事件库,非阻塞IO库,http库,DNS客户端)

一句话总结,libev尝试追随UNIX工具箱哲学,一次只干一件事,每次都做到最好。

注意,这是libev的设计哲学,我想我作为libev的设计者,有着足够的发言权。至于这些设计目标有没有实际达到,或者这些设计哲学是否坚实可靠,则交由你来评判。

[译者注]第一次注意到libev,是在gevent的开发者blog上的这篇libev and libevent,它简要说明了gevent从libevent切换到libev的决策过程。回顾gevent,它实际需要的只是一个负责事件循环的C库,在上面的HTTP库和DNS库,都可以交由标准库强大得不得了的python完成。因此,作者的选择还是非常明智的。

从Libevent 2.0来看,libevent团队已经意识到上述的问题,也提取出了event loop这个上下文context,但是在具体的DNS解析,HTTPS连接等等,还是有种力不从心的感觉。作为libevent的使用者,我们经历了libevent的试错阶段,发现HTTPS实现不行,再切换到libcurl去,与其这样,倒不如直接不提供该功能呢

[译]libev和libevent的设计差异的更多相关文章

  1. 转:libev和libevent的设计差异

    转:http://www.cnblogs.com/Lifehacker/p/whats_the_difference_between_libevent_and_libev_chinese.html [ ...

  2. Libev和LibEvent

    libev和libevent功能基本相同,名称相近,到底该用哪一个呢?zhouhh@zhh64:~$ sudo apt-cache search libeventlibevent-dev – Deve ...

  3. [转帖]聊聊Web App、Hybrid App与Native App的设计差异

    聊聊Web App.Hybrid App与Native App的设计差异 https://www.cnblogs.com/zhuiluoyu/p/6056672.html 编者按:这3类主流应用你都了 ...

  4. libev与libevent区别

    摘自stackflow的回答,主要从架构上说明了二者的区别: As for design philosophy, libev was created to improve on some of the ...

  5. HDFS 与 GFS 的设计差异

    后端分布式系列」前面关于 HDFS 的一些文章介绍了它的整体架构和一些关键部件的设计实现要点. 我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现的 ...

  6. 聊聊Web App、Hybrid App与Native App的设计差异

    目前主流应用程序大体分为三类:Web App.Hybrid App. Native App. 一.Web App.Hybrid App.Native App 纵向对比 首先,我们来看看什么是 Web ...

  7. 超赞!聊聊WEB APP、HYBRID APP与NATIVE APP的设计差异

    编者按:这3类主流应用你都了解吗?设计师除了要有视觉功夫,对不同形式的APP也应当了然于胸,今天百度的同学写了一篇非常全面的总结,帮你迅速搞定3类主流APP的设计方法,附带一大波避雷针,带你巧妙跳过A ...

  8. 后端分布式系列:分布式存储-HDFS 与 GFS 的设计差异

    「后端分布式系列」前面关于 HDFS 的一些文章介绍了它的整体架构和一些关键部件的设计实现要点. 我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现 ...

  9. Web App、Hybrid App与Native App的设计差异

    目前主流应用程序大体分为三类:Web App.Hybrid App. Native App. 一.Web App.Hybrid App.Native App 纵向对比 首先,我们来看看什么是 Web ...

随机推荐

  1. 注解 @RequestParam,@RequestHeader,@CookieValue,Pojo,servlet原生API

    1.@RequestParam 我们的超链接:<a href="springMvc/testRequestParam">testRequestParam</a&g ...

  2. HTML基础知识

    一个完美的web前端攻城狮,所具备的专业素养有:HTML5.XHTML.CSS3.JavaScript.JQuery.PS.PHP等.所以说,我要学的东西还有很多... 没别得,我也是一个H5的初学者 ...

  3. IO(1)

    java的IO主要在java.io包下,包括字节流和字符流. 1 File File类可以对文件和目录进行操作,就是不能访问文件本身,其常用方法包括: 1)String getName(),返回fil ...

  4. PDA固定资产条码管理系统软件-解决固定资产实物清查的瓶颈问题,大大提高清查效率

    固定资产管理系统是企业信息化管理中的一个重要组成部分,固定资产具有价值高,使用周期长.使用地点分散.管理难度大等特点.一个企业的良性发展,避免不了的要涉及到企业资产的有效管理.对于那些技术装备密集型的 ...

  5. php正则逆向引用与子模式分析

    先看一个例子: <?php $string = 'April 15, 2003'; $pattern = '/(\w+) (\d+), (\d+)/i'; $replacement = '${1 ...

  6. React虚拟DOM浅析

    在Web开发中,需要将数据的变化实时反映到UI上,这时就需要对DOM进行操作,但是复杂或频繁的DOM操作通常是性能瓶颈产生的原因,为此,React引入了虚拟DOM(Virtual DOM)的机制. 什 ...

  7. 李洪强iOS经典面试题154- 通知与推送

    李洪强iOS经典面试题154- 通知与推送   通知与推送 本地通知和远程推送通知对基本概念和用法? image 本地通知和远程推送通知都可以向不在前台运行的应用发送消息,这种消息既可能是即将发生的事 ...

  8. Angularjs ng-if和ng-show的区别

    ng-if:判断条件,为true时向html中插入节点,否则从html中移除节点: ng-show: 简单的显示和隐藏(display) 坑点:ng-if会创建一个新的作用域(scope),如果内部元 ...

  9. Html5+NodeJS——拖拽多个文件上传到服务器

    实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用 ...

  10. ArcGIS AddIN开发:如何调用ArcMap中的选择工作空间的窗体

    示例代码如下: public static IWorkspaceName BrowseWorkspace(int hwnd,out IWorkspace ws) { IGxObjectFilterCo ...