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. ComputeHash neden deterministik olarak davranmıyor?
- 2. ThreadStatic nesnelerinin deterministik atılması
- 3. C# + COM Etkileşim, deterministik serbestlik
- 4. Scala grafiğinde deterministik topolojik düzen
- 5. SQL Server deterministik kullanıcı tanımlı fonksiyon
- 6. Git gc deterministik aralıklarla yürütülür mü?
- 7. Otomatik olarak ve deterministik bir ilişkilendirme, değişebilirlik vb. Işlevini sınama
- 8. Niçin DATE'den VARCHAR'a deterministik olmayan bir döküm var?
- 9. Eşzamanlı DB bağlantı havuzu Haskell
- 10. Windows Üzerinden Çok Çekirdekli Haskell
- 11. Entity Framework paralel eşzamanlı sorguları destekliyor mu?
- 12. Thrash çöp toplandığında Haskell bir kıvılcım atıyor mu? Örneğin
- 13. Haskell parMap ve paralellik
- 14. İç içe geçmiş "kullanma" lardan daha iyi bir deterministik imha modeli var mı?
- 15. Haskell'de paralel hesaplama
- 16. UDF DETERMINISTIC yanıtları nasıl sıfırlanır? Bir DETERMİNİSTİK UDF işlevselliğini değiştirdiğinizde DB2 V5R4 İÇİNDE
- 17. Neo4j içinde sayma ilkelleri
- 18. iken java.util.Date ve java.sql.Date
- 19. Tüm artımlı derlemeyi devre dışı bırak ve paralel oluşturma
- 20. Haskell: Neden "par" şeklini tanımladı?</p> <pre><code>par :: a -> b -> b </code></pre> <p>Bildirimi, tek atılır o argüman:
- 21. Haskell'de, kapsamlı olmayan modeller neden derleme zamanı hataları değildir?
- 22. Eşzamanlı bağlantı ve performans?
- 23. Eşzamanlı oturumlar ve AJAX
- 24. iken dize
- 25. Veri Paralel ile Çalışma istisnası Haskell/GHC 7.4.2
- 26. mümkün değildir
- 27. Eşzamanlı rasgele sayı üretimi
- 28. Bu Haskell kodu neden sonlandırılmıyor?
- 29. Haskell - Belirsiz tip değişkeni, neden?
- 30. MongoDB'm neden eşzamanlı push güncellemeleri başarısız oluyor?
+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