据我了解,Haskell 有绿色线程。但它们的重量有多轻。是否可以创建100万个线程?
或者 100 000 个线程需要多长时间?
from here http://www.reddit.com/r/programming/comments/a4n7s/stackless_python_outperforms_googles_go/c0ftumi.
import Control.Concurrent
import Control.Monad
n = 100000
main = do
left <- newEmptyMVar
right <- foldM make left [0..n-1]
putMVar right 0 -- bang!
x <- takeMVar left -- wait for completion
print x
where
make l n = do
r <- newEmptyMVar
forkIO (thread n l r)
return r
thread :: Int -> MVar Int -> MVar Int -> IO ()
thread _ l r = do
v <- takeMVar r
putMVar l $! v+1
在我的 2.5gh 笔记本电脑上,这需要不到一秒的时间。
将 n 设置为 1000000,那么写这篇文章的其余部分就变得很困难,因为操作系统疯狂地进行分页。肯定使用了超过一千兆的内存(没有让它完成)。如果你有足够的 RAM,它的工作时间肯定是 100000 版本的 10 倍。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)