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.