[Haskell-cafe] Re: Joels Time Leak

Bulat Ziganshin bulatz at HotPOP.com
Wed Jan 4 11:18:56 EST 2006

Hello Joel,

Wednesday, January 04, 2006, 12:42:24 AM, you wrote:

JR> contribute to my delays and timeouts. There are also quite a few
JR> unanswered questions at the moment (why is 'sequ' slow?

are you tried to inline it? and all other pickling combinators

the problem is what when you write

put (Cmd a b) = do putWord16 a; putWord32 b

and inline putWord16/putWord32, you can be sure that you will get
sequencing for free. but what is a pickling combinators? it's a
high-order functions, which combines drivers for simple types like
Word16 to final driver which can read entire Command. the principial
question - will this final driver be interpreted, i.e. executed as a
large number of enclosed calls to pickler combination functions, or it
will be compiled, i.e. executed as simple sequence of getByte calls,
which then builds the final value. in first case your program will
spend all its time in these combinator funtions calls, so you will not
have much effect from using Ptrs in elementary picklers

because of this issue i said you that pickler combinators can't
guarantee performance, in constrast to Binary package which uses an
artless approach to combine individual "picklers" - separate get and
put fucntions so that each one becomes an straightforward imperative
program as opposite to tuple carrying several functional values

JR> does the scheduler need to be tuned?)

try something like this:

  withMVar global

it will ensure that commands will be processed sequentially; i think
it's the best you can do in this program: all tasks inside lock are
cpu-bound, so it is better to finish them in one thread before going
to another

in production code you will also need to guard whole withMVar block
with small timeout (say, 0.02s)

Best regards,
 Bulat                            mailto:bulatz at HotPOP.com

More information about the Haskell-Cafe mailing list