Conceptele de thread („thread”) și multithreading

Conceptele de fir („thread”) și multithreading - secțiunea Educație, Sisteme de operare, medii și shell-uri Când vorbesc despre procese, ei vor, prin urmare, să noteze că O.

Multithreading oferă posibilitatea de a executa mai multe tipuri de operații în paralel într-un singur program de aplicație. Calculul paralel (și, prin urmare, utilizarea mai eficientă a resurselor CPU și mai puțin timp total de execuție a sarcinilor) este acum adesea implementat la nivel de fir, iar un program conceput ca mai multe fire într-un singur proces poate fi executat mai rapid executându-l în paralel. . În același timp, este de dorit să se reducă interacțiunea firelor între ele, deoarece accelerația de la execuția simultană a firelor paralele poate fi redusă la minimum datorită întârzierilor de sincronizare și schimb de date.

Un exemplu de utilizare a multithreading-ului este o foaie de calcul sau un procesor de text. Dacă au fost concepute având în vedere multi-threading, atunci utilizatorul poate solicita să-și recalculeze foaia de lucru sau să îmbine mai multe documente și să continue simultan să completeze tabelul sau să deschidă următorul document pentru editare. Multithreading-ul poate fi folosit mai ales eficient pentru a executa aplicații distribuite: de exemplu, un server multithreaded poate executa simultan cereri de la mai mulți clienți simultan.

Așadar, a fost introdusă entitatea „thread” pentru a distribui timpul procesorului între posibilele joburi cu ajutorul acestor unități. Esența „procesului” sugerează că atunci când expediați, trebuie să luați în considerare toate resursele alocate acestuia. Și când manipulezi fluxurile, le poți schimba contextul doar dacă se întâmplătrecerea de la un fir la altul în cadrul aceluiași proces. Toate celelalte resurse de calcul nu sunt afectate. Fiecare proces constă întotdeauna din cel puțin un fir și numai în cazul paralelismului intern devine posibilă „împărțirea” acestui fir în mai multe paralele.

Nevoia de fire de execuție a apărut chiar și pe mașinile virtuale cu un singur procesor, deoarece firele de execuție vă permit să organizați calculele mai eficient. Pentru a folosi avantajele mașinilor virtuale cu multiprocesor cu memorie partajată, firele de execuție sunt deja necesare, deoarece permit nu numai accelerarea cu adevărat a execuției acelor sarcini care permit paralelizarea lor naturală, ci și încărcarea procesoarelor, eliminând astfel posibilul lor „inactiv” .

Fiecare thread este executat strict secvențial și are propriul contor de programe și stivă. Firele de execuție, ca și procesele, pot genera fire de execuție copii, deoarece fiecare proces constă din cel puțin un fir de execuție. Ca și procesele tradiționale (adică procesele care constau dintr-un singur fir), fiecare fir poate fi într-una dintre stările active. Atâta timp cât un fir este blocat (sau doar așteaptă să ruleze într-o coadă de sarcini), poate rula un alt fir în același proces. Thread-urile împart timpul CPU în același mod ca și procesele normale, conform diferitelor opțiuni de programare.

Nu există protecție completă între fire, deoarece nu este necesar. Toate firele de execuție ale unui proces rezolvă întotdeauna problema comună a unui utilizator, iar mecanismul de fire este folosit aici pentru a rezolva problema mai rapid, paralelizând-o. În același timp, este foarte important ca un programator să pună la dispoziție mijloace convenabile de organizare a interacțiunii diferitelor părți ale uneia.programe.