Multithreading

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 16 martie 2016; verificările necesită 43 de modificări .

Multithreading  ( eng.  Multithreading ) este o proprietate a unei platforme (de exemplu, un sistem de operare , o mașină virtuală etc.) sau a unei aplicații , constând în faptul că un proces generat în sistemul de operare poate consta din mai multe fire de execuție care rulează " în paralel ”, apoi mănâncă fără o comandă prescrisă la timp . Pentru unele sarcini, această separare poate realiza o utilizare mai eficientă a resurselor computerului .

Astfel de fire sunt numite și fire de execuție (din engleză  thread of execution ); numite uneori „fire” (traducere literală a firului englezesc  ) sau informal „fire”.

Descriere

Esența multithreading-ului este cvasi-multitasking-ul la nivelul unui proces executabil, adică toate firele sunt executate în spațiul de adrese al procesului. În plus, toate firele de execuție dintr-un proces partajează nu numai un spațiu de adrese comun, ci și descriptori de fișier comun . Un proces care rulează are cel puțin un fir (master).

Multithreading (ca doctrină de programare ) nu trebuie confundat nici cu multitasking , fie cu multiprocessing , chiar dacă sistemele de operare care implementează multitasking tind să implementeze și multithreading.

Avantajele unei implementări multithreaded a unui anumit sistem față de unul multitasking includ următoarele:

Avantajele implementării cu mai multe fire a unui anumit sistem față de unul cu un singur thread includ următoarele:

În cazul în care firele de execuție necesită o interacțiune relativ complexă între ele, pot apărea probleme de multitasking, cum ar fi blocajele.

Implementarea hardware

Pe un procesor convențional, gestionarea firelor este gestionată de sistemul de operare. Firul este executat până când apare o întrerupere hardware, are loc un apel de sistem sau până când expiră timpul alocat pentru acesta de sistemul de operare. După aceea, procesorul trece la codul sistemului de operare, care salvează starea firului de execuție (contextul său) sau trece la starea unui alt fir, căruia i se alocă și timp pentru execuție. Cu o astfel de multithreading, un număr suficient de mare de cicluri de procesor este cheltuit pe codul sistemului de operare care schimbă contextele. Dacă suportul pentru fire este implementat în hardware, atunci procesorul însuși va putea comuta între fire și, în cazul ideal, executa mai multe fire simultan pentru fiecare ciclu de ceas. Pentru sistemul de operare și utilizator, un astfel de procesor fizic va fi văzut ca procesoare logice multiple.

Există două forme de multithreading care pot fi implementate în procesoare din hardware:

Tipuri de implementare a firelor

  1. Nicio întrerupere a temporizatorului în cadrul aceluiași proces
  2. Când utilizați o solicitare de sistem de blocare pentru un proces, toate firele sale sunt blocate.
  3. Complexitatea implementării

Interacțiunea cu firele

Într-un mediu cu mai multe fire, există adesea sarcini care necesită suspendarea și reluarea unor fire în funcție de munca altora. În special, acestea sunt sarcini legate de prevenirea conflictelor de acces atunci când se utilizează aceleași date sau dispozitive din firele executabile paralele. Pentru a rezolva astfel de probleme, se folosesc obiecte speciale pentru interacțiunea firelor, cum ar fi excluderi reciproce (mutexuri), semafore, secțiuni critice, evenimente etc. Multe dintre aceste obiecte sunt obiecte nucleu și pot fi utilizate nu numai între firele de execuție ale aceluiași proces, ci și pentru interacțiunea dintre firele de execuție ale diferitelor procese.

Critica terminologiei

Traducerea termenului englezesc thread ca „thread” într-un context legat de programare contrazice traducerea acestuia „thread” într-un context general al limbajului și creează, de asemenea, coliziuni cu termenul Data stream .

Cu toate acestea, termenul „flux” este asociat cu traduceri ale literaturii tehnice străine realizate în anii 1970 de editura Mir. În prezent, în „cercurile academice” (adică în manuale, materiale didactice, cursuri universitare, disertații etc.), este considerată o referință. Termenii „fir”, „fir” etc. sunt considerați jargon tehnic .

Vezi și

Literatură

Note

  1. Jeffrey Richter . „Jeffrey Richter. Windows pentru profesioniști. Construirea de aplicații WIN32 eficiente, adaptate specificului Windows pe 64 de biți. 2001
  2. MSDN http://msdn.microsoft.com/en-us/library/ms682530%28VS.85%29.aspx Arhivat la 23 decembrie 2011 la Wayback Machine

Link -uri