PLINQ

Parallel Extensions (PLINQ) numele de dezvoltare pentru o bibliotecă de concurgență gestionată dezvoltată printr-o colaborare între Microsoft Research și echipa CLR de la Microsoft. Biblioteca a fost lansată în versiunea 4.0 a .NET Framework.[1] Este compus din două părți: paralel LINQ (PLINQ) și Task Parallel Library (TPL).[2][3] Acesta constă, de asemenea, dintr-un set de structuri de coordonare a datelor (CDS) - seturi de structuri de date utilizate pentru sincronizarea și coordonarea executării sarcinilor concurente.[4]

O interogare PLINQ este asemănătoare cu una LINQ. Diferența este ca PLINQ încearcă să pună în valoare toate procesoarele sistemului. Realizează acest lucru prin împărțirea sursei de date în mai multe segmente și apoi executând interogarea pe fiecare segment, pe fire de execuție diferite, rulând în paralel pe mai multe procesoare.

Când este folosit modul secvențial?

PLINQ va încerca întotdeauna să execute o interogare cel puțin la fel de rapid ca și cum ar rula secvențial. Mai exact caută operatori sau combinații de operatori care de obicei fac execuția mai lentă in modul paralel. Când gasește aceste combinații rulează în mod secvențial.

După mai multe teste utilizatorul poate realiza că o interogare poate rula mai repede în modul paralel. În aceste cazuri utilizatorul poate folosi metoda WithExecutionMode.

static void ForceParallel()
{
    var customers = GetCustomers();
    var parallelQuery = (from cust in customers.AsParallel()
                            .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                         where cust.City == "Berlin" 
                         select cust.CustomerName)
                        .ToList();
}

Sintaxă

Diferența între o interogare simplă LINQ și una PLINQ este folosirea metodei AsParalel în sursa de date și executarea interogării folosind ForAll.

   var source = Enumerable.Range(100, 20000);

           
            var parallelQuery = from num in source.AsParallel()
                                where num % 10 == 0
                                select num;

            // Rezultatele sunt procesate in paralel
            parallelQuery.ForAll((e) => DoSomething(e));

Bibliografie

  • en Introduction to PLINQ
  • en How to: Create and Execute a Simple PLINQ Query
  • en Understanding Speedup in PLINQ

Note

  1. ^ „What's New in the .NET Framework 4”. Accesat în . 
  2. ^ „Programming in the Age of Concurrency: Concurrent Programming with PFX”. Accesat în . 
  3. ^ „MSDN Magazine: Task Parallel Library”. Arhivat din original la . Accesat în . 
  4. ^ „June 2008 CTP - Parallel Extensions to the .NET FX”. Accesat în . 


  • v
  • d
  • m
.NET Framework
Arhitectură
  • Common Language Runtime (CLR)
  • COM Interop
  • Framework Class Library (FCL)
  • Version history
Componente
  • ADO.NET
    • Entity Framework
  • ASP.NET
    • AJAX
    • Dynamic Data
    • MVC framework
    • Razor view engine
  • ClickOnce
  • Dynamic Language Runtime
  • Extensible Application Markup Language (XAML)
  • Language Integrated Query (LINQ)
  • Managed Extensibility Framework
  • Microsoft Silverlight
  • Microsoft XNA
  • Parallel Extensions
  • Windows Communication Foundation (WCF)
    • WCF Data Services
  • Windows Forms (WinForms)
  • Windows Identity Foundation (WIF)
  • Windows Presentation Foundation (WPF)
  • Windows Workflow Foundation (WF)
  • .NET Remoting
Unelte
  • CLR Profiler
  • ILAsm
  • .NET Compiler Platform
  • Native Image Generator (NGen)
  • XAMLPad
Medii de dezvoltare
  • Visual Studio
    • Blend
    • Express
  • MonoDevelop
  • SharpDevelop
Organizații
  • .NET Foundation
  • Microsoft
  • Xamarin
  • Categorie Categorie
  • List-Class article Listă