Really neat! I haven't tried it yet (I'm mostly using Mac OS X for development) but it sounds promising. With this patch, heavily loaded web-servers written with Gambit should have much better performance.
Marc
On 19-Aug-05, at 9:54 AM, Adam Langley wrote:
Gambit uses the select call on POSIX systems to multiplex IO operations. This is fine for small numbers of file descriptors, but falls apart quickly with large numbers[1].
libevent[2] is a wrapper library around a number of modern IO multiplexing systems (epoll on Linux, kqueue on the BSDs as well as poll and select).
Attached is a patch which converts Gambit to using edge triggered I/O with epoll and libevent. This also requires a patch (attached) of libevent since the standard distribution doesn't include edge triggering support and the upstream appears to be on holiday.
(epoll is required because I don't have a BSD box on which to develop edge triggering support for kqueue)
This patch (for Gambit) preprocesses away to nothing unless --enable-libevent is passed to the configure script. (Note that, since this patches the configure.ac script, you'll need to run autoconf to regenerate).
I hope I've not broken anything, but at this stage I've only tested that the console and tcp ports work.
This patch (in the future) should also allow people, who write programs which use socket calls directly, to integrate into the main event loop at some point.
Testing is more than welcome and, if you find a form of IO which is broken, please email me.
[1] http://monkey.org/~provos/libevent/libevent-benchmark2.jpg [2] http://monkey.org/~provos/libevent/
-- Adam Langley agl@imperialviolet.org http://www.imperialviolet.org (+44) (0)7906 332512 PGP: 9113 256A CC0F 71A6 4C84 5087 CDA5 52DF 2CB6 3D60
<libevent-1.1a-edge.agl.patch> <gambit-4b14-libevent-1-agl.patch> _______________________________________________ Gambit-list mailing list Gambit-list@iro.umontreal.ca http://mailman.iro.umontreal.ca/mailman/listinfo/gambit-list