zoukankan      html  css  js  c++  java
  • libev和libevent区别

    

    libev和libevent区别

    两者都是事件驱动编程库,对于它们之间的区别,看了stackoverflow上libev的作者Marc Lehmann的解释,有所了解。简单说libev对libevent做了改进和精简。libevent使用全局变量,导致非线程安全。它的watcher结构也过大,把I/O、计时器、信号句柄整合在一起。而且(作者认为)libevent的附加组件如http和dns库都实现不好,且有安全问题。libev对这些地方做了改进,避免使用全局变量,拆分watcher等。另外libev去掉了外部库(比如http和dns),只专注于事件驱动服务,所以更精简。

    As for design philosophy, libev was created to improve on some of the architectural decisions in libevent, for example, global variable usage made it hard to use libevent safely in multithreaded environments, watcher structures are big because they combine I/O, time and signal handlers in one, the extra components such as the http and dns servers suffered from bad implementation quality and resultant security issues, and timers were inexact and didn’t cope well with time jumps.

    Libev tried to improve each of these, by not using global variables but using a loop context for all functions, by using small watchers for each event type (an I/O watcher uses 56 bytes on x86_64 compared to 136 for libevent), allowing extra event types such as timers based on wallclock vs. monotonic time, inter-thread interruptions, prepare and check watchers to embed other event loops or to be embedded and so on.

    The extra component problem is “solved” by not having them at all, so libev can be small and efficient, but you also need to look elsewhere for an http library, because libev simply doesn’t have one (for example, there is a very related library called libeio that does asynchronous I/O, which can be used independently or together with libev, so you can mix and match).

    So in short, libev tries to do one thing only (POSIX event library), and this in the most efficient way possible. Libevent tries to give you the full solution (event lib, non-blocking I/O library, http server, DNS client).

    Or, even shorter, libev tries to follow the UNIX toolbox philosophy of doing one thing only, as good as possible.

    Note that this is the design philosophy, which I can state with authority because I designed libev. Whether these design goals have actually been reached, or whether the philosophy is based on sound principles, is up to you to judge.

  • 相关阅读:
    洛谷 P1084 疫情控制 —— 二分+码力
    CF 600 E Lomsat gelral —— 树上启发式合并
    HBase框架基础(二)
    Shell脚本
    Kafka框架基础
    HUE搭配基础
    Oozie框架基础
    Sqoop框架基础
    Flume框架基础
    Hive框架基础(二)
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3716975.html
Copyright © 2011-2022 走看看