Hi Max,
if you're going for such a solution, then why not use difference lists
or even better bytestring builders as your representation of the
not-yet-flushed logging journal? Bytestring builders (from the
blaze-builder library) support a fast append and fast serialization
from a number of formats to bytestring.
best regards,
Simon
2011/8/10 Max Cantor
Just curious, but might it be faster to:
replace the MVar handle with an IORef [Data.Sequence.Seq String] logs are appended with atomicModifyIORef then every n seconds, a worker thread uses atomicModifyIORef to clear the sequence and write the log messages to a handle?
this way, logging a message doesn't require taking an mvar
I have no idea if this is better, just thought i'd throw it out.
On Aug 10, 2011, at 11:17 AM, Kazu Yamamoto (山本和彦) wrote:
Every user-thread of Mighttpd records a log message with Handle. Since Handle is protected with MVar, serialization is done. Multiple log messages are buffered in the buffer of Handle to reduce the number of the write system call. Moreover, I re-implemented hPut to reduce unnecessary intermediate data to compose a log message.
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel