"Git blokları" nın (go
veya go-loop
veya diğer yapıların) bir kanal döndürdüğünü anlıyorum. Ancak bu kanalın amacını hiç anlamadım. Nasıl kullanılacağını bilmek isterim. Belki de ihtiyacım olmadığında fazladan kanallar oluyorum.core.async git blokları neden bir kanal döndürüyor?
1
A
cevap
2
go
-engelinin dönüş kanalını, go
-engelinin tamamlanmasıyla senkronize etmek isteyen başka bir işleve (yalnızca makro değil) geçebileceğim bir tanıtıcı olarak kullanıyorum. Alternatif olarak, go
-bloğunun tamamlanmasının tamamlanmasını garantilemek için kanaldaki okumaları bloke edebilirim. İşte
(defn par-sum [coll]
(let [half-n (/ (count coll) 2)
[left right] (split-at half-n coll)
left-sum-chan (async/go (core/reduce + 0 left))
right-sum (core/reduce + 0 right)
left-sum (async/<!! left-sum-chan)]
(+ left-sum right-sum)))
, biz sol ve sağ toplamlar içinde hesaplamak paralel. Toplam toplamı hesaplamak için sol toplama ihtiyacımız olduğundan, sonuçta beklememiz ve go
- engelini almamız gerekiyor.
İlgili konular
- 1. Eşzamanlılık ve kanal karışıklığı git
- 2. Git blokları ile clojure kodu yapılandırma
- 3. Neden 'kanal kaynağı' çağrılamıyor?
- 4. Kanal seç <- <- Kanal
- 5. core.async geçiş kanalı karışımı
- 6. Math.ceil neden bir çift döndürüyor?
- 7. Neden TImage resmimi döndürüyor?
- 8. blokları?
- 9. Neden durum = 0 ile bir yanıt döndürüyor?
- 10. Neden NSCalendar'ın dateFromComponents yanlış bir tarih döndürüyor?
- 11. Neden GL1L'deki texture1d() bir vec4 döndürüyor?
- 12. Android - onItemLongClick (...) neden bir boole döndürüyor?
- 13. Neden getirme, garip bir tamsayı karesi döndürüyor?
- 14. .NET'te Kanal Fabrikası nedir?
- 15. Enumerable.Except neden DISTINCT öğeleri döndürüyor?
- 16. Bölüm neden yanlış kalanı döndürüyor?
- 17. Neden getHandler() null değerini döndürüyor?
- 18. Math.min ([1,2]) neden NaN döndürüyor?
- 19. Neden (ListView) findViewById döndürüyor null?
- 20. Neden Calendar.get (Calendar.MONTH) 0 döndürüyor?
- 21. Git: neden time.Now(). Saat/Dakika/Saniye, altı haneli bir sayı döndürüyor?
- 22. HttpURLConnection.getInputStream() blokları
- 23. Blokları/Erubis
- 24. Kod :: Blokları
- 25. Yorum blokları
- 26. Git neden asılıyor?
- 27. Neden yeni Date() bir günlük offset ile bir tarih döndürüyor?
- 28. Neden bir işlev adı yazdırmak bir değer döndürüyor?
- 29. OpenCV kanal açma algılaması
- 30. Kanal almayı engelleme
Bu yüzden bir go blok olduğu için, bir işlev için olabileceği gibi bir dönüş değeri diye bir şey yoktur. Bunu aşmak için bir go bloğu, dönüş değerini gönderdiği bir kanalı döndürür. –