raj*_*raj 8 concurrency multithreading haskell functional-programming
我想如何在像Haskell这样的函数式编程语言中实现生产者/消费者?以及它与命令式语言有何不同?我对函数式编程语言的理解是原始的.任何帮助将不胜感激.
Don*_*art 14
使用抢占线程和通过通道传递的消息的生产者/消费者抽象:
import Data.Char
import Control.Concurrent
import Control.Concurrent.Chan
main = do
c <- newChan
cs <- getChanContents c -- a lazy stream of events from eventReader
forkIO (producer c) -- char producer
consumer cs
where
-- thread one: the event producer
producer c = forever $ do
key <- getChar
writeChan c key
-- thread two: the lazy consumer
consumer = mapM_ print . map shift
where shift c | isAlpha c = chr (ord c + 1)
| otherwise = c
Run Code Online (Sandbox Code Playgroud)
您将在Erlang中使用类似的模型.表示使用者和生产者的线程,以及它们之间的共享消息管道,每个线程都是异步的.
我将补充dons一个很好的答案,这里的基础机制是一个叫做的东西MVar,它是一个值必需的并行容器.你"放"和"进入"进入和离开一个MVar.获得一个空的MVar块,就像放一个完整的一样.它同时是一种通信机制和同步机制.我相信它是由Arvind发明的Monsoon/*t项目的一部分.Nikhil和Arvind有一本很好的书,它解释了他们的平行Haskell的pH方言.许多想法已经被GHC采用,这本书非常值得一读.