[Haskell-cafe] binary IO
bulatz at HotPOP.com
Tue Dec 27 08:58:26 EST 2005
Tuesday, December 27, 2005, 12:18:54 PM, you wrote:
JR> My desired goal is to have 4k bots (threads?) running at the same
JR> time. At, say, 1k/s per bot I figure something like 4Mb/s round-trip.
no problem. my library handle about 10-15mb/s, and i think that speed can
be doubled by using unboxed ints
JR> I'm getting delays of 4s+ with just 100-200 bots reading from a file
divide and conquer! calc speed of networking, unzipping, unpickling
separately. compare these speeds with overall program througput to
calc multithreading "expenses"
JR> and even less than that in a networked environment. The more bots I
JR> run the higher the delays, to the point of frequent delays of 10s+.
these delays says nothing about speed. you are mixing two things -
your end goal is to make delays short, but your instrument - speeds of
different processes and to decide what you need to optimize you must
calc these speeds separately. without it, your "optimization" is just
JR> Each bot is given 5, 15 or 35 seconds to respond by the poker server
so you don't need to create complex timer thread machinery, just use 3
threads which proceed requests in FIFO order
JR> I spent 3 hard months (barely any weekends, no holidays) polishing my
JR> Haskell code.
... wasting your time to speed up code that is slow by design. don't
forget that this article was published as FUNCTIONAL pearl, not
JR> I started the Erlang rewrite at about 3pm this saturday
JR> and about 1.5 workdays later I have 80% of what I need. I expect to
JR> finish the rest today and will have a good yardstick to measure
JR> Haskell against.
i think that you will get just the same problems as with Haskell and
forced to switch back because it's easier to low-level optimize in
Haskell than in Erlang
JR> My only requirement is that there be a _single_ spec for pickling and
JR> unpickling, i.e. no separate methods. The following is not acceptable
JR> to me ;-).
say exactly WHY you need this single spec. i know at least 4
solutions, what is the best depends on your exact needs
for example, one of these solutions looks like this:
instance Binary TableInfo where
put_ bh (TableInfo a b c d) = put_ bh (a,b,c,d)
get bh = do (a,b,c,d) <- get bh; return (TableInfo a b c d)
instance Binary GameType where
put_ bh = putWord16 bh . fromEnum
get = liftM toEnum . getWord16
Bulat mailto:bulatz at HotPOP.com
More information about the Haskell-Cafe