Care sunt fire (fire de) și de ce pentru a le folosi, de programare în Delfi - web, mysql

La începutul erei computerului, toate de programare a fost cea mai mare parte un singur fir. Ați creat programul, stantare găuri în cartele perforate sau bandă, pentru a trata un teanc de cărți de la un centru de computer local, și câteva zile mai târziu a primit o altă stivă, în cazuri de succes, care conține rezultatele dorite. Toate prelucrările se desfășoară în conformitate cu principiul - care a primit anterior, efectuate anterior, și atunci când executați programul, acesta a folosit un timp de calculator.
Dar lucrurile se schimbă. Conceptul de execuție Multithreaded apărut pentru prima dată în sistemele de partajare a timpului (time sharing), în cazul în care mai multe persoane pot lucra simultan pe un calculator central. Foarte important, CPU pur și simplu împărțit între utilizatori și sistemul de operare în sine a folosit conceptul de „proces“ și „flux“. Desktop-uri au fost în același mod. Anterior, DOS și Windows au fost single-tasking. doar un singur program poate rula pe un computer. Odată cu creșterea complexității aplicațiilor și a cerințelor în creștere pentru PC, în special în ceea ce privește grafica de înaltă performanță și funcționalitate de rețea, multi-proces și sistemele de operare necesare pentru multi-threaded.

În primul rând, vom defini ceea ce se numește un proces. Cele mai multe Windows 95, 98 și NT au această idee bună intuitivă. Ei văd procesul ca un program care rulează pe mașină, coexistente și partajarea cu alte programe CPU, disc și memorie. Programatorii știu că procesul - este o provocare a codului executabil, iar acest cod este unic, și instrucțiunile sale sunt executate într-o anumită ordine. In general, procesele sunt izolate. Ei folosesc resursele (memorie, disc IO, timp CPU) sunt virtuale, astfel încât fiecare proces are propriul set de resurse, fără a le impartasesti cu alte persoane, care este furnizat de sistemul de operare. Procese executa module de cod. Acestea pot fi separate, de exemplu, Windows Explorer module de cod, și Microsoft Word - sunt diferite. Cu toate acestea, ele pot fi partajate ca și în cazul DLL. Codul DLL este de obicei realizată în mai multe procese, și de multe ori în același timp. În urma instrucțiunile, în general, pentru diferite procese nu este comandat: Microsoft Word nu se oprește deschiderea unui document în timp ce trimiterea de date din coada de imprimantă! Desigur, atunci când diferite procese interacționează, programator trebuie să păstreze ordinea, după cum se va discuta mai jos.
Următoarea definiție - fluxul (fire, fire). fluxuri Concept a apărut atunci când a devenit clar că este de dorit să existe aplicarea, punerea în aplicare a unui set de acțiuni cu costuri minime de comutare, în măsura în care este posibil, simultan. În cazul în care anumite acțiuni pot provoca o întârziere semnificativă într-una dintre fluxurile (de exemplu, de așteptare pentru intrare de la utilizator), este de multe ori de dorit ca programul a avut posibilitatea de a desfășura alte activități în mod independent (de exemplu, vraja verificarea de fond sau de prelucrare a mesajelor de rețea de intrare). Cu toate acestea, crearea unui nou proces pentru fiecare acțiune (respectiv cu problema apare pentru a asigura interacțiunea lor) este adesea nejustificată.

În cele mai multe sisteme care acceptă multithreading, pot exista mai mulți utilizatori care fac solicitări simultane la un sistem informatic. De obicei, numărul de procesoare din sistem este mai mic decât numărul de fluxuri care pot fi executate în paralel. Cele mai multe sisteme de suport divizare în timp (timp feliere), de asemenea, cunoscut sub numele de multitasking (multitasking), pentru a rezolva această problemă. Sistemul de fire de partajare a timpului rula pentru o perioadă scurtă de timp, și apoi forțat să iasă; și anume timer determină periodic sistemul de operare pentru a re-decide ce fire de executie sa fie executat, eventual oprind fluxul este deja în execuție, și să fie difuzate altele, care au fost suspendate. Acesta permite chiar și un singur procesor pentru a executa mai multe fire. Pe un PC, intervalele de timp de ordinul a 55 de milisecunde.

De ce folosesc fire?

Fluxurilor nu ar trebui să schimbe semantica programului. Ei schimba doar operațiunile de run-time. Ca urmare, ele sunt aproape întotdeauna folosite pentru soluții elegante la problemele asociate cu performanța. Iată câteva exemple de situații în care pot fi utilizate fluxuri:

Executarea acțiune lungă: atunci când aplicația este calcule, aceasta nu răspunde la mesaj, ca urmare a ecranului să nu fie actualizate.
Efectuarea acțiunii de fond: unele sarcini nu sunt foarte mult de timp, dar ar trebui să fie efectuată în mod continuu.
Efectuarea de acțiuni de intrare-ieșire (I / O): lucrul cu discul sau rețea poate duce la o întârziere nedeterminată. Curente va permite, în astfel de cazuri nu se oprește executarea altor părți ale programului.

Toate aceste exemple au în comun: unele dintre acțiunile din program poate provoca întârzieri potențial lung în activitatea CPU, inacceptabil pentru celelalte operațiuni pe care trebuie să-și petreacă chiar acum. Desigur, există și alte avantaje, cum ar fi:

Pe sistemele multiprocesor, cu o singură aplicație de flux nu va utiliza două sau mai multe procesoare! În capitolul 3, este explicat mai detaliat.
O diviziune eficientă a timpului: folosind prioritățile procese și fire pentru a asigura o utilizare mai adecvată a timpului CPU.

Utilizarea rațională a fluxurilor face lent, prost interacționează cu programul de utilizator rapid și comod, eficient, și poate îmbunătăți în mod semnificativ atât performanța și ușurința de utilizare.

A se vedea, de asemenea: