summaryrefslogtreecommitdiff
path: root/README
diff options
context:
space:
mode:
Diffstat (limited to 'README')
-rw-r--r--README58
1 files changed, 54 insertions, 4 deletions
diff --git a/README b/README
index 4e8ec2d..5895388 100644
--- a/README
+++ b/README
@@ -2,8 +2,58 @@ libev is modelled after libevent (http://monkey.org/~provos/libevent/), but aims
to be faster and more correct, and also more featureful. Examples:
- multiple watchers can wait for the same event without deregistering others.
-- fork() is supported and can be handled.
-- timers are handled as a priority queue (faster)
-- watchers use less memory (faster)
-- less calls to epoll_ctl (faster)
+ (registering two read events on fd 10 and unregistering one will not
+ break the other)
+
+- fork() is supported and can be handled
+ (there is no way to recover from a fork when libevent is active)
+
+- timers are handled as a priority queue
+ (libevent uses a less efficient red-black tree)
+
+- supports absolute (wallclock-based) timers in addition to relative ones,
+ i.e. can schedule timers to occur after n seconds, or at a specific time.
+
+- timers can be repeating (both absolute and relative ones)
+
+- detects time jumps and adjusts timers
+ (works for both forward and backward time jumps and also for absolute timers)
+
+- can correctly remove timers while executing callbacks
+ (libevent doesn't handle this reliably and can crash)
+
+- less calls to epoll_ctl
+ (stopping and starting an io watcher between two loop iterations will now
+ result in spuriois epoll_ctl calls)
+
+- usually less calls to gettimeofday and clock_gettime
+ (libevent calls it on every timer event change, libev twice per iteration)
+
+- watchers use less memory
+ (libevent on amd64: 152 bytes, libev: <= 56 bytes)
+
+- library uses less memory
+ (libevent allocates large data structures wether used or not, libev
+ scales all its data structures dynamically)
+
+- no hardcoded arbitrary limits
+ (libevent contains an off-by-one bug and sometimes hardcodes a limit of
+ 32000 fds)
+
+- libev separates timer, signal and io watchers from each other
+ (libevent combines them, but with libev you can combine them yourself
+ by reusing the same callback and still save memory)
+
+- simpler design, backends are potentially much simpler
+ (in libevent, backends have to deal with watchers, thus the problems)
+ (epoll backend in libevent: 366 lines, libev: 89 lines, and more features)
+
+whats missing?
+
+- evdns, evhttp, bufferevent are missing, libev is only an even library at
+ the moment.
+
+- no priority support at the moment.
+
+- kqueue, poll (libev currently implements epoll and select).