Bu konudaki toplumun bakış açısını almak istiyorum. Büyük DB/IO bağlı bir işlemim varsa, Görev Paralel kitaplığını kullanarak bireysel işlem yollarını paralel hale getirmek ne kadar akıllı olur? Parallelization Considerations
ben ... Bir örnek kullanacağız ve ben öğelerin bir listesi için aşağıdaki işlemleri
- Sorgu bir DB yapmanız gereken Bazı öğeleri dinamik bir parametre listesine göre gruplandırmak.
- Gruplandırılmış her sonuç için, toplanan sonuca göre bir şey için veritabanını sorgulayın.
- Gruplandırılmış her sonuç için, bazı sayısal hesaplamaları yapın (sırayla 3 ve 4 olur).
- # hesaplanan sonuç için bazı ekler ve güncelleştirmeler Do 3
- her öğe için bazı ekler ve güncellemeleri # 1
Mantıken konuşmak gerekirse, adım at # görevlerin bir grafiğin içine parallelize yapabilirsiniz iade etmeyin Bir öğe olarak 3, # 5, # 6, önceki sonucun üzerinde bir yatak yoktur. Ancak, bunların her biri veritabanında (sql server) bekleyecek ve bu da sadece SQL server'ın bize izin verdiği sürece işleyebileceğimizi anlıyoruz.
Ancak, görevi yerel makineye mantıksal olarak dağıtmak istiyorum, böylece Veritabanı bizim kadar hızlı bir şekilde beklemek zorunda kalmadan işlem yapabilmemizi sağlıyor. Ben db aramaları Thread.Sleeps (Ben de bir milyon kez daha hızlı olan .SpinWait ile bazı varyasyonları denedim), ve paralel sürümü tamamen seri olan mevcut uygulamadan daha hızlı waaaaay ile yerine ben bazı sahte prototip yaptım ve hiç paralel değil.
SQL sunucusuna çok fazla yük katmaktan korktuğum şey ... Bu yoldan çok aşağı gitmeden önce göz önünde bulundurmam gereken herhangi bir husus var mı?