Yeni C# 5.0 'uyumsuz' ve 'bekliyor' anahtar kelimeler kullanın birden çok çekirdek?
İki yeni anahtar# 5.0 C dili eklenir async ve el ele bir C çalışma iş hem de await,# arama iş parçacığı engelleme olmadan yöntem zaman uyumsuz olarak.
Benim sorum, bu yöntemler aslında birden çok çekirdek yararlanmak ve çalıştırın paralel olarak yapmak veya zaman uyumsuz yöntem arayan olarak aynı iş parçacığı çekirdek mi çalışır?
CEVAP
Eric Lippert mükemmel bir cevabı var; ben sadece async
paralellik biraz daha açıklamak istedim.
Basit" yaklaşımı 3 ** Bir seferde sadece tek bir şey: . "seri
static void Process()
{
Thread.Sleep(100); // Do CPU work.
}
static async Task Test()
{
await Task.Run(Process);
await Task.Run(Process);
}
Bu örnekte, Test
yöntem iş parçacığı havuzu Process
kuyruk olacak ve tamamlandığında, Process
iş parçacığı havuzu için tekrar sıraya olacaktır. Test
yöntemi ~200ms sonra tamamlayacak. Herhangi bir zamanda, yalnızca bir iş parçacığının gerçekten ileri ilerleme hareket ediyor.
Bu parallelize için basit bir yol Task.WhenAll
kullanmak için:
static void Process()
{
Thread.Sleep(100); // Do CPU work.
}
static async Task Test()
{
// Start two background operations.
Task task1 = Task.Run(Process);
Task task2 = Task.Run(Process);
// Wait for them both to complete.
await Task.WhenAll(task1, task2);
}
Bu örnekte, Test
yöntem iş parçacığı havuzu Process
iki kuyrukları ve bunları tamamlamak için de bekler. Test
yöntemi ~100 MS civarında sonra tamamlayacak.
Task.WhenAll
(Task.WhenAny
) 16*/await
*basit paralellik destek sunuldu. Ancak, VUK eğer daha gelişmiş bir şey istiyorsanız (true CPU bağımlı paralel işlem VUK için daha uygundur) hala orada. VUK iyi 18*/await
*ile oynuyor.
Benim async
temel paralellik into to async
blog post olarak "Eric bahsetti." ben bağlam kapak
C C 14 yeni anahtar kelimeler ekleyere...
Eğer gizleme amacı eğer yeni bir anaht...
Doğru Görev kullanın.Sadece uyumsuz-be...
Neden C genel anahtar kelime kullanın#...
Yönetme birden çok zaman uyumsuz NSURL...