Üretici/tüketiciyi Haskell gibi fonksiyonel bir programlama dilinde nasıl uygulayabiliriz? ve bir Imperative dilinden nasıl farklı olacak? Fonksiyonel programlama dilini anlamam ilkeldir. Herhangi bir yardım takdir edilecektir. Bir kanal boyunca geçen önleyici konuları ve mesajları kullanarakHaskell'de üretici ve tüketici sorunu mu var?
cevap
bir üretici/tüketici soyutlama:
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
için Erlang benzer bir model kullanmak. Tüketici ve yapımcıyı temsil eden iplikler ve bunların her biri eşzamansız olarak hareket eden paylaşılan bir mesajlar borusu.
Bu yanıt, bu sorunu nasıl zorunlu olarak çözebileceğini açıklar. Ya da daha kesin olarak, problemi çözen işlevsel bir hesaplamanın işlevsel olarak nasıl üretileceği. Şiva'nın tamamen işlevsel bir çözüm aradığını merak ediyorum. Bununla birlikte, Python jeneratörlerinde – Conal
dons
'un mükemmel yanıtına, buradaki temel mekanizmanın, MVar
adı verilen bir şey olduğunu ve bir değer için zorunlu, paralel bir kapsayıcı olduğunu ekleyeceğim. MVar'ın içine ve dışına "koyarsın" ve "çıkar". Boş bir MVar bloğu almak, tam bir tane gibi. Aynı anda bir iletişim mekanizması ve bir senkronizasyon mekanizması. Monsoon/* t projesinin bir parçası olarak Arvind tarafından icat edildiğine inanıyorum. Paralel Haskell'in pH diyalektlerini açıklayan güzel bir book by Nikhil and Arvind var. Fikirlerin çoğu GHC'ye kabul edildi ve kitap okumaya değer.
Norman ve Don tarafından belirtilen durumsal yaklaşımların yanı sıra, normal işlev uygulaması ve tembelliği üretici ve tüketici olarak da düşünebilirsiniz. İşte
doğal sayılar için bir üreticidir:nats = [1..]
Ve burada bu sayıların karelerini hesaplayan bir tüketici Python'da
squares = map (\x -> x * x) nats
böyle yield return
olarak C# Üreticileri veya jeneratörler genellikle şöyle ifade edilebilir: Haskell'deki basit tembel listeler.
'un yan etkileri olabilir (saf listelerin aksine). bunu da monadik listelerle yapabilirsiniz ve ayrıca Jeneratörün Jeneratör Mono transformatörüyle "paket" gibi üretkenleri üretebilirsiniz. – yairchu
- 1. Go: Bir üretici, birçok tüketici
- 2. Çok işlemcili - üretici/tüketici dizaynı
- 3. Bu üretici/tüketici örneğini anlamıyorum
- 4. Apache Kafka konsolu Üretici-Tüketici örneği
- 5. java eşzamanlı: çok üretici bir tüketici
- 6. Aygıtlarla Konuşmak İçin Üretici/Tüketici Serially
- 7. Varolan bir Bileşen için özel Tüketici ve Üretici Oluşturun
- 8. html_entity_decode sorunu mu var?
- 9. Üretici tarafından Gözlemlenebilir taraftan değil, tüketici tarafında değil
- 10. Kilit-Free Çoklu Üretici/Tüketici Kuyruk C++ 11
- 11. Çok sayıda okuyucu/üretici için "Control.Concurrent.Chan" güvenli kanallar var mı?
- 12. Postfix posta gönderme sorunu mu var?
- 13. Üst düzey tüketici bloğunda commitOffsets var mı?
- 14. Redis Pub/Sub'da Rekabet Tüketici destekleniyor mu?
- 15. Üreticiler ayrıca tüketiciler olduğunda Üretici/Tüketici modelindeki engelleme kodunu nasıl kullanırım? - Nasıl sona ererim?
- 16. Apache Kafka Çoklu Tüketici Örnekleri
- 17. AMQP - tüketici yönlendirme tuşunun erişim var mı?
- 18. Ad aralığı sorunu mu var? veya başka bir şey?
- 19. Delphi UUID üretici
- 20. OpenERP isim üretici
- 21. java Kafka üretici hatası
- 22. Rakip bir tüketici çözümü nasıl uygulanır?
- 23. mu Oauth 2.0 gizli tüketici anahtarı/tüketiciyi ihtiyaç
- 24. nasıl sorunu şu var
- 25. Bir tasarım sorunu var
- 26. Aşağıdaki sorunu var
- 27. Açık Kilitler ve Koşul Değişkenleri Java Üreticisi Tüketici
- 28. Dizide yineleme ve firavuna kaydetme konusunda sorun yaşıyorum. Geri arama sorunu mu var?
- 29. Kafka kullanarak kafka sunucusu ile iletişim kurulamıyor Üretici API
- 30. JBoss HornetQ: Tüketici-pencere boyutu yavaş tüketici için ayarlayın
Bu, http://stackoverflow.com/questions/1234947/can-producer-consumer-problem-be-solved-without-using-assignment adresine çok yakındır. Orada sunulan çözümleri kontrol ettiniz mi? – nlucaroni