Skip to content

Instantly share code, notes, and snippets.

@yihuang
Created November 9, 2012 14:04
Show Gist options
  • Save yihuang/4045809 to your computer and use it in GitHub Desktop.
Save yihuang/4045809 to your computer and use it in GitHub Desktop.

build

$ ghc temp.hs

Note

Don't use -O2 when build temp.hs, would stack overflow.

speed

ghc is 10X faster then gevent.

$ time python temp.py 100000
python temp.py 100000  3.22s user 0.26s system 99% cpu 3.499 total
$ time ./temp 100000
./temp 100000  0.30s user 0.08s system 99% cpu 0.379 total
$ time ./temp 1000000
./temp 1000000  3.98s user 0.57s system 99% cpu 4.595 total

memory usage

$ python temp.py 100000
601M
$ ./temp 100000
184M
$ ./temp 1000000
1.73G
import System.Environment (getArgs)
import Control.Monad (replicateM)
import Control.Concurrent (forkIO, threadDelay)
import Control.Concurrent.MVar
test started wait = do
putMVar started ()
takeMVar wait
createThread wait = do
started <- newEmptyMVar
_ <- forkIO (test started wait)
return started
main = do
[n] <- getArgs
wait <- newEmptyMVar
replicateM (read n) (createThread wait) >>= mapM_ takeMVar
-- uncomment this to watch memory usage.
--putStrLn "started"
--threadDelay 100000000
from gevent import Greenlet, joinall, event, sleep
g_evt = event.Event()
def test(evt):
evt.set()
g_evt.wait()
def create_thread():
started = event.Event()
Greenlet.spawn(test, started)
return started
import sys
evts = [create_thread() for i in range(int(sys.argv[1]))]
for e in evts:
e.wait()
# uncomment this to watch memory usage
#print 'started'
#sleep(100)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment