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.async

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).oop

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).post

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

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.spa

相關文章
相關標籤/搜索