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

  • After Effects Tutorials w/ Mikey

    After Effect

    24 HAZİRAN 2009
  • MultiPlayStationMan

    MultiPlaySta

    17 Aralık 2009
  • Top Gear

    Top Gear

    27 Mart 2006