Haskell'de eşzamanlılık ve paralellik bağlamında determinizmi tam olarak anlama. Bazı örnekler yardımcı olabilir. TeşekkürParalel haskell ilkelleri (par ve pseq) deterministik iken eşzamanlı neden deterministik değildir?
Paralel haskell ilkelleri (par ve pseq) deterministik iken eşzamanlı neden deterministik değildir?
cevap
saf değerlerle uğraşan, değerlendirme sırası önemli değildir. Bu temelde paralellik'un yaptığı gibi: Saf değerleri paralel olarak değerlendirmek. Saf değerlerin aksine, sipariş genellikle yan etkilere sahip eylemler için önemlidir. Eşzamanlı olarak çalışan eylemlere eş zamanlılık eşanlamlı denir. Örnek olarak
, iki eylemleriputStr "foo"
ve
putStr "bar"
düşünün. Bu iki eylemin değerlendirildiği sıraya bağlı olarak, çıktı ya "foobar", "barfoo" ya da aralarında herhangi bir durumdur. Çıktı, belirli değerlendirme sırasına bağlı olduğu için
belirsizliği olan'dur. Başka bir örnek olarak
iki değer
sum [1..10]
ve
5 * 3
düşünün. Bu ikisinin değerlendirildiği sıraya bakılmaksızın, her zaman aynı sonuçlara düşerler. Bu
determinizm genellikle sadece saf değerlerle garanti edebileceğiniz bir şeydir.
Eşzamanlılık ve paralellik iki farklı şeydir.
eşzamanlılık olmayan deterministik etkileşim birden konuları var demektir. Örneğin, her müşterinin bir iş parçacığı tarafından ele alındığı bir sohbet sunucunuz olabilir. Kararsızlık, modellemeye çalıştığınız sistem için önemlidir.
Paralellik sadece daha hızlı program akışını yapmak için birden çok iş parçacığı kullanmaktan ibarettir. Ancak, sonuç, algoritmayı sırayla çalıştırırsanız tam olarak aynı olmalıdır.
Birçok dil paralellik için temel öğelerine sahip değildirler, bu nedenle iş parçacığı ve kilit gibi eşzamanlılık temel öğeler kullanarak uygulamak zorunda. Bununla birlikte, bu, programcının, istenmeyen determinizm veya diğer eşzamanlılık sorunlarını kazayla tanıtmadığınızdan emin olmanız için dikkatli olmanız gerektiği anlamına gelir. par
ve pseq
gibi açık paralellik ilkelleriyle, bu kaygıların çoğu sadece gider.
Bu ... a * gerçekten * iyi bir açıklama. Teşekkür ederim. –
+1; başka bir deyişle, paralellik bir optimizasyondur; eşzamanlılık anlamsallığı değiştirir. – ehird
@ehird Evet. Bunu iletmeye çalıştığım şey mükemmel. – fuz
Ek açıklık: 1 veri akışı değeri sadece bir kez bağlanabilir 2 program kullanımının önbellek değeri bağlanana kadar beklemeli. Bu nedenle, iki iş parçacığı aynı veri akışı değerini kullanırken davranış belirleyicidir. – jiamo