piscina fir în c #, fluxuri

piscina fir în c #, fluxuri

De fiecare dată când rula C # fir. câteva sute de microsecunde cheltuite pentru organizarea de astfel de lucruri ca un nou teanc de variabile locale. Reducerea acestor cheltuieli permite piscina fir, oferind magazin de pre-construite fluxuri reutilizabile. organizarea piscina firului este esențială pentru programarea paralelă eficientă și paralelism cu granulație fină; un bazin de fir în C #, permite operarea pe termen scurt, fără costurile asociate cu setarea debitului.

Când se utilizează fluxul de la piscina să ia în considerare câteva puncte.

• imposibilitatea proprietăților de montare Denumire flux de depanare piscina dificil (deși atunci când fereastra de depanare Fire de mediu Visual Studio poate fi atașat la descrierea debitului).

• fluxurile de piscină sunt întotdeauna fundal.

• blocarea fluxului de piscina poate duce la performanțe slabe

Este posibil să se schimbe în mod liber prioritatea unui fir de la piscina - atunci când fluxul se întoarce înapoi la piscina, va fi restaurat prioritatea inițială.

Pentru a determina dacă fluxul de curent flux de piscină, proiectat Thread.CurrentThread.IsThreadPoolThread proprietate.

Cel mai simplu mod de a explicita orice lansare în fluxul de la piscina - este utilizarea de Task.Run

Task.Run (() => Console.WriteLine ( "Hello din piscina fir"));

Deoarece înainte de versiunea lansată de .NET 4, conceptul nu a existat problema, o alternativă comună este de a apela ThreadPool. QueueUserWorkltem:

ThreadPool.QueueUserWorkltem (notUsed => Console.WriteLine ( "Hello"));

Puritatea piscinei firului

Piscina fir servește o altă funcție, care este de a se asigura că un excedent temporar de muncă intensivă computațional nu va duce la depășirea limitei procesorului. Depășirea limitei - starea în care există un flux activ înainte de nuclee CPU, iar sistemul de operare trebuie să aloce fluxuri de felii de timp. Depășirea daunelor limita performanța, deoarece alocarea de felii de timp necesită comutare extinse context, și poate duce la cache-uri de invaliditate CPU care au devenit esențiale pentru a asigura performanța procesoarelor moderne.

CRJ evită depășirea limitei în piscina firului în detrimentul cozii de sarcini și personaliza lor de pornire. Acesta începe cu începutul sarcinilor concurente care corespunde numărului de boabe de hardware, și apoi ajustează paralelismul algoritmului de căutare extremelor, de tuning este volumul de lucru continuu într-o anumită direcție. În cazul în care îmbunătățește performanța, CRJ continuă să se deplaseze în aceeași direcție (și altfel - în contrariul). Acest lucru asigură promovarea curbei optime de performanță, chiar și în prezența unor procese concurente pe computer.

Strategia implementată în CLR, funcționează bine în cazul de satisfacție a următoarelor două condiții:

• elemente de lucru sunt, practic, de scurtă durată (mai puțin de 250 de milisecunde, și în mod ideal, mai puțin de 100 de milisecunde), astfel încât CLR are multe posibilități de măsurare și de reglare;

• sarcini care cea mai mare parte a timpului meu este blocat, nu domină piscina.

Blocarea este de încredere, deoarece dă o impresie falsă CLR este că se încarcă procesorul. CRJ mediu este suficient de inteligent pentru a detecta acest lucru și să compenseze (prin introducerea unor fluxuri suplimentare în piscina), cu toate că acest lucru se poate face piscina de vulnerabile la o ulterioară depășire a limitei. Se poate introduce, de asemenea, o întârziere ca CRJ controlează viteza de introducere a unor noi fluxuri. în special într-un stadiu incipient al duratei de viață a aplicației (în special în sistemul de operare al clientului, în cazul în care acesta susține consumul redus de resurse).

Menținerea piscina fir de curățenie este deosebit de important atunci când este necesar să se utilizeze pe deplin CPU.