Fli*_*man 14 concurrency multithreading haskell green-threads
据我所知,Haskell有绿线.但他们的重量有多轻.是否有可能创建100万个线程?
或者10万个线程需要多长时间?
bar*_*ley 17
从这里开始.
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
Run Code Online (Sandbox Code Playgroud)
在我不太2.5的笔记本电脑上,这需要不到一秒钟.
将n设置为1000000并且很难写出这篇文章的其余部分,因为操作系统像疯了一样分页.绝对使用超过一个公羊(没有让它完成).如果你有足够的RAM,它肯定会在100000版本的适当时间内工作10倍.