vis*_*vis 2 parallel-processing concurrency haskell
只是好奇.如果我有2个线程产生使用forkIO,它们之间的通信可以使用MVar.我想知道在使用并行Haskell的spark时是否同样适用par.我理解par不会创建一个实际的线程,而只是指向可以并行发生的某些计算的指针.
以下代码编译,main引发以下错误:thread blocked indefinitely in an MVar operation.
t1 a = putMVar a "Hi"
t2 a = do
v <- takeMVar a
print v
main1 = do
a <- newEmptyMVar
forkIO (t1 a)
forkIO (t2 a)
main = do
a <- newEmptyMVar
(t1 a) `par` (t2 a)
Run Code Online (Sandbox Code Playgroud)
我想知道在使用并行Haskell使用par创建的spark时是否同样适用
不,这不可能.这MVar是一种明确的,非确定性的通信机制,可在手动控制线程时使用.parspark是一个更高级别的抽象,GHC运行时负责为您进行通信.
当您尝试激发IO操作时,没有任何反应,因为引发的操作只能是纯计算.
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |