4 ms·
But even with IOCP, Windows IIS implements request handling as a kernel module to accelerate it, and yet still isn't faster than nginx on linux with many cpu co
by ploxiln 10y ago
But even with IOCP, Windows IIS implements request handling as a kernel module to accelerate it, and yet still isn't faster than nginx on linux with many cpu cores.
https://www.rootusers.com/wp-content/uploads/2017/01/iis-linux-webservers-8-cpu-cores.png https://www.rootusers.com/wp-content/uploads/2017/01/iis-lin...
But can be noticeably faster on fewer cores:
https://www.rootusers.com/linux-vs-windows-web-server-benchmarks/ https://www.rootusers.com/linux-vs-windows-web-server-benchm...
But still in many cases has more performance pitfalls in practice:
http://serverfault.com/questions/317199/linux-vs-windows-7-web-server-performance-differences http://serverfault.com/questions/317199/linux-vs-windows-7-w...
So, sure, epoll() does not help for optimal distribution of accept() or read() of the same fds over multiple threads. But even with a single thread accepting, or with "thundering herd" problems of other strategies, linux is still usually more efficient in practice. Often dumb non-optimal designs are faster just due to subtle problems caused by overall system complexity.
Side note: macOS has kqueue, but it's been buggy in enough releases that libevent and libev usually have to use select() on macOS to be safe.
http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#OS_X_AND_DARWIN_BUGS http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#OS_X_AN...
https://github.com/libevent/libevent/pull/377 https://github.com/libevent/libevent/pull/377
So for your "optimal socket handling" tasks you're really limited to choosing between Linux and FreeBSD, and there are other issues to consider there, like drivers.