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

[译]libev和libevent的设计差异

本文译自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. 分页与无限滚动在评论区的设计差异

    本文由作者 呆呆丶 于社区发布 本篇文章的问题挺有意思,虽然是一个页面中无关紧要的模式,但却是典型的反模式设计,各位可以简单读读. 读者提问: 社区论坛类产品,天涯.虎扑与百度贴吧的帖子评论页有一个设 ...

  2. android 技能标签功能_iOS和Android用户体验设计差异

    摘要:iOS和Android用户体验设计差异 关键词:iOS,Android,用户体验设计 本文将讨论iOS和Android之间的具体设计差异. 基本差异 1.设计规范 iOS和Android遵循不同 ...

  3. android recycleview长按多选_UI设计中Android和IOS设计差异总结

    由于设计师.产品经理使用的移动设备大部分是iPhone,所以在做设计时,容易忽略Android和iOS的差异,按照iOS的规范进行设计,两端只做一套. 只做一套的会存在两个问题: 1.安卓用户的使用习 ...

  4. 安卓和ios的ui设计区别_UI设计中IOS和安卓的设计差异

    设计师在做app的时候很少考虑两个平台的差异,在设计上用一套设计稿去做,其实有很多不一样的地方.今天我就针对UI设计中IOS和安卓的设计差异进行简单的说明. iOS与安卓设计上的差异主要从系统差异.成 ...

  5. 痞子衡嵌入式:对比恩智浦全系列MCU(包含Kinetis/LPC/i.MXRT/MCX)的GPIO电平中断设计差异...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦全系列MCU(包含Kinetis, LPC, i.MXRT, MCX)的GPIO电平中断设计差异. 在痞子衡旧文 <以i.M ...

  6. 相同点安卓和iosui的相同点_UI设计中IOS和安卓的设计差异

    设计师在做app的时候很少考虑两个平台的差异,在设计上用一套设计稿去做,其实有很多不一样的地方.今天我就针对UI设计中IOS和安卓的设计差异进行简单的说明. iOS与安卓设计上的差异主要从系统差异.成 ...

  7. libev:libevent的挑战者

    libev 是高性能事件循环/事件模型的网络库,并且包含大量新特性. 它是继lievent和Event perl module之后的一套全新网络库.它追求的目标:速度更快,bug更少,特性更多,体积更 ...

  8. android 模糊查询搜索框_彻底搞懂 iOS 和 Android 的设计差异

    设计经验分享 · 不定时更新 ------------------------------------------- 胡桃子 深圳 | UI/UX设计师 唧唧歪歪:设计师在做 app 的时候很少考虑两 ...

  9. Android Studio 选项菜单和动画结合_Android 应用与iOS 应用之间的设计差异对比!

    同一个App,为什么iOS 和Android 的交互操作有那么大的区别?本文将用大量原生设计案例,为你一一说明它们为什么应该这样做,赶紧学起来! 了解并适当结合平台规范与优势,才能做到最佳的用户体验. ...

最新文章

  1. 说说浏览器的沙箱机制
  2. linux下测试RTC驱动相关的命令date和hwclock常见用法简介
  3. VC编程实现IE风格的界面
  4. Flash Media Server 4.5下载
  5. NBU7.5升级至8.1.2(在不考虑授权的情况)
  6. 词汇的积累与遣词造句 —— 准确的表达、新鲜的词汇
  7. VS+VSS代码管理
  8. 朴素贝叶斯:拉普拉斯修正
  9. OpenWrt路由器无线中继、桥接、信号放大、访客网络的实现方案
  10. mysql索引失效的几种情况
  11. 5. Prometheus概念-Jobs和Instances
  12. 【2021-09-22 修订】【梳理】计算机网络:自顶向下方法 第二章 应用层(docx)
  13. ios网易大白Crash自动防护
  14. 2022年10月deepin 20.7.1 谈谈我们的N卡驱动开发心得
  15. 永远的美女......
  16. HttpClient 调用耗时长服务问题记录和处理方案
  17. stormmedia文件夹,360downloads文件夹,FavoriteVideo文件夹是干什么的?
  18. Lisp:AutoLisp入门、操作编程实例详细攻略
  19. mysql8找不到bir_LR常见问题
  20. Marvell 88NV1120固态硬盘简易开卡攻略

热门文章

  1. 贪婪算法在求解最小生成树中的应用(JAVA)--Prim算法
  2. virtualbox 启动时报Kernel driver not installed (rc=-1908) 的错误
  3. GitHub 配置及简单使用
  4. Java代码实现Fibonacci数列
  5. 需求调研报告模板_2020年工业软管行业深度市场调研及投资策略建议报告-液体化学品增加对其需求...
  6. kodi刮削器 中文_教你PLEX插件播放4K不能使用KODI解码导致卡顿的解决办法
  7. python pandas 数据库_Python中pandas函数操作数据库
  8. C语言根据用户输入的3个顶点,【if 语句】根据用户的输入 3 个顶点坐标计算三角形的面积和周长,如果不能构成三角形提示错误....
  9. Linux下安装ElasticSearch-head插件
  10. 2021-2022元宇宙报告:化身与智造,元宇宙座标解析