SORU
27 Mart 2012, Salı


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
28 Mart 2012, ÇARŞAMBA


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bobbylee Budde

    Bobbylee Bud

    13 ŞUBAT 2011
  • Ionized Digital Air Studios

    Ionized Digi

    20 HAZİRAN 2009
  • JonnyEthco

    JonnyEthco

    5 EKİM 2006