Introducere în multithreading

Unul dintre aspectele cheie în programarea modernă este multi-threading. Cu ajutorul multi-threading, putem identifica mai multe fluxuri în aplicația care va îndeplini diferite sarcini simultan. Dacă avem, să zicem, o aplicație grafică care trimite o cerere la orice server sau citește și procesează un fișier imens, fără filetare, ne-am blocat o interfață grafică pe durata sarcinii. Și datorită fluxurilor, putem identifica trimite cererea sau orice altă sarcină care pot fi prelucrate pentru o lungă perioadă de timp, într-un fir separat. Prin urmare, de exemplu, aplicații client-server (și numai ei), practic, de neconceput fără filetare.







Funcția principală de aplicare a fluxurilor concentrate în spațiul de nume System.Threading. Aceasta definește o clasă care reprezintă un fir separat - clasa de fir.

Clasa de fir definește un set de metode și proprietăți care vă permit să controleze fluxul și să obțină informații despre el. Proprietățile de bază ale unei clase:

proprietate CurrentContext static oferă un context în care firul se execută

CurrentThread proprietate statică returnează o referință la firul de funcționare

proprietate IsAlive specifică dacă fluxul care rulează în prezent

proprietate IsBackground indică dacă firul de fundal

Proprietatea Numele conține numele fluxului

Prioritate proprietate păstrează prioritatea firului - enumerarea valorii ThreadPriority

proprietate ThreadState returnează starea firului - una dintre valorile de enumerare ThreadState

Unele dintre metodele de clasă Subiect:

Metoda statică GetDomain returnează o referință la domeniul de aplicare

GetDomainId metoda statica returneaza id-ul domeniului de aplicare, în care fluxul de curent







Metoda Sleep statică oprește curgerea într-un anumit număr de milisecunde

Abandonați metoda notifică CLR că este necesar pentru a opri fluxul, dar încetarea fluxului de lucru se întâmplă dintr-o dată, dar numai atunci când devine posibil. Pentru a verifica caracterul complet al debitului ar trebui să interogheze ThreadState de proprietate

Metoda de întrerupere întrerupe fluxul pentru un timp

Alăturați-vă execuție blochează metoda firului de asteptare pana, până la finalizarea fluxului pentru care a fost invocată această metodă

Metoda Resume reia firul anterior suspendată

Metoda de pornire începe fluxul

Se suspendă metoda suspendă firul

Obținerea informațiilor despre flux

Folosind proprietățile și metodele de obținere a informațiilor despre fluxul descris mai sus:

În acest caz, vom obține ceva de genul următoarea concluzie:

Deoarece proprietatea implicit numele obiectului firului nu se găsește în primul caz se obține ca valoarea acestei proprietăți este un șir gol.

starea de curgere

stările de curgere sunt conținute în ThreadState listare:

Abandonată. fluxul este oprit, dar nu este încă complet terminat

AbortRequested. Metoda de curgere este numit Renunt, dar opri fluxul nu a avut loc

Context. flux în fundal

Rularea. fluxul este funcțional (nu a oprit)

Oprit. Alimentare finalizat

StopRequested. Alimentare a fost rugat să se oprească

Suspendat. firul este suspendat

SuspendRequested. Alimentare a primit o cerere de suspendare

Nșepută. Hrana pentru animale nu a fost început încă

WaitSleepJoin. flux este blocat ca urmare a unor acțiuni sau metode Dormi Alăturați-vă

În timpul funcționării, fluxul se poate schimba statutul sub acțiunea mai multor metode. Deci, la început, înainte de aplicarea metodei Start starea lui este nșepută. Rularea flux, vom schimba starea sa de alergare. Apelați metoda Sleep, starea se va schimba în WaitSleepJoin. Aplicarea metodei Renunt, traducem astfel într-o stare de flux AbortRequested, și apoi Aborted, după care fluxul în cele din urmă finalizat.

prioritățile de filet

flux Prioritățile sunt aranjate în ThreadPriority listare:

Valoarea implicită este setată la debitul normal. Cu toate acestea, putem schimba prioritatea în programul de lucru. De exemplu, creșterea importanței fluxului prin stabilirea prioritatea cea mai ridicată. mediu CRJ va citi și analiza valoarea de prioritate pe baza acestora și acest flux să aloce o anumită perioadă de timp.