On Mon, 2003-05-26 at 21:08, Ruben Alvarez wrote:> I'm looking for the most efficient OpenSource IMAP server
> and I am told that Dovecot Server is a good solution.
>
> Anyway, I have inspected the source code and I think Dovecot is not a
> multi-threaded server, but a forked server. I am surprised about this
> issue, because threads perfomance should be higher than creating a new
> process for each connection....I suppose.
Well, I actually already replied privately to this when it was sent to
imap-list, but here's a more complete answer for everyone:
Threads are useful when you have a lot of data to share across the
threads. For anything else they're not worth the trouble and can
actually be even slower than processes in some cases because of extra
locking it needs. In UNIX that is. In Windows processes are a lot
heavier than threads.
Pretty much the only case in IMAP server when you want to share data is
when a mailbox is opened multiple times by different connections.
Dovecot already shares the data in that case because it's all in the
index files that are mmap()ed.
Processes also provide safety. You can't accidentally read someone
else's mails because of a bug in the server. Or if you happen to learn
how to crash the server, you can kill only your own connection. With
threaded server you would have killed everyone's connections.
> By the other hand, ?do anybody know any multi-threaded OpenSource IMAP
> server?. I would like test performance of Dovecot server versus a
> multi-threaded one.
Biggest performance differences between IMAP servers is how smartly they
store the message data and how smartly they're able to read it in a way
that IMAP clients want them.
CPU usage is pretty irrelevant in IMAP servers. It's I/O that is going
to be your bottleneck. I optimize CPU usage only when it's clearly
showing somewhere (SEARCH BODY is a lot slower than grepping the files,
I'd have to figure out why some day).