stabilit la 05 martie '13 11:15
Mai întâi, trebuie să înțelegem că cuvântul „fluxul“ românesc tradus doi termeni diferiți. Primul - un fir de executie, acesta este același fir. al doilea - fluxul de date, este flux.
Știu că C ++ nu are fluxurile sale
Fals. În urmă fluxurile de execuție standard au deja. Un flux de date este acolo pentru o lungă perioadă de timp. Și în cele din urmă ambele realizate prin intermediul sistemului de operare.
dar reprezintă flux (date)
la ce moment de timp de funcționare sau este în mod constant de lucru
Odată ce începe de curgere, ea începe să funcționeze atâta timp cât se termină activitatea sa. Pentru a începe, consideră că acesta este executat în paralel. O grămadă de a rula programe care se execută în același timp, nu se confunda? Cu fluxul de aceeași. Mai mult decât atât, de fapt, procesele nu sunt puse în aplicare - este doar un container. Fir de execuție. În consecință, fiecare proces are cel puțin un fir.
Diferența am descris mai sus.
Cum de a face acest lucru, în cazul în care aveți nevoie de un flux de date?
Primul pas este de a crea o funcție care va fi executat într-un fir separat. Apoi apelați funcția corespunzătoare a sistemului de operare (_beginthread. CreateThread și altele asemenea). Aici este un exemplu.
În general, în întrebarea dumneavoastră amestecat cu atenție întrebările de două tipuri de fluxuri. Am încercat să împartă și, practic, să răspundă la un fir de execuție (filet).
acum va exista un eseu despre „cum mi-am petrecut anii studenției.“ Dacă fac ceva greșit, vă rugăm să nu agritsya, ci pur și simplu corectați-mă.
Există o aplicație. Când îl rulați, există un proces. Procesul - este încărcat în instanță aplicație RAM. Fiecare proces este format din fluxuri, s-ar putea spune chiar că procedurile / procesele funcțiile sunt împărțite între fire. Fluxul poate fi una sau pot fi mai multe. De exemplu, dacă doriți să atunci când rulați aplicația, aveți în același timp, a fost tras de interfață și încarcă datele din baza de date, aceste două operații va trebui să fie împărțită în două fluxuri - interfața va fi primar, iar datele privind sarcina suplimentară.
continuați
Care fir va rula mai repede? Procesarea fiecărui proces, sistemul alocă timp CPU, în funcție de prioritatea unui proces (vezi vă prioritățile în managerul de activități). Fiecare flux în cadrul aceluiași proces are prioritate și în conformitate cu prioritățile alocate timpul CPU vor fi împărțite între fluxuri.
Răspuns 5 '13 martie la 11:23
Așa cum sa menționat, termenul „multi-threading“, oferă o altă opțiune „vizualizare ușoară“ a firului.
cum să reprezinte fluxul și că este vorba, la ce moment a timpului de lucru
oricare din program este o secvență de comenzi care sunt procesate de către procesorul într-un singur fir de program - această secvență este una în proces, într-un multi-threaded - o mulțime de ei. Ei lucrează în momentul în care le lăsați, și anume Puteți rula mai multe fire dintr-o dată, sau pot fi rulate după cum este necesar pentru evenimente specifice, pot fi completate prin îndeplinirea atribuțiilor lor, sau există durata de viață a programului. Dacă vă întrebați cum ar fi „de ce au venit cu, există, de asemenea procese“, - următorul răspuns. comutare proetsssora între diferite procese durează o lungă perioadă de timp, datorită faptului că procesele lor au propria prostarnstvom memorie. La comutarea între fluxurile de aceste costuri semnificativ mai mici, deoarece fluxurile împărtășesc o mare parte a resurselor programului. Mai mult decât atât, fiecare dintre fluxurile nu se imparte cu celălalt fără ambiguități includ stiva (proces de stivă, împărțit la numărul „conținute de acestea“ fluxuri de fiecare flux devine propriul său) și contorul de program. In general, fluxul poate fi reprezentat ca o parte bucata de cod care rulează în paralel într-un singur proces.
ce memorie este
ca fluxul de execuție - este, în esență o bucată de cod în memoria de program.
Ce este multithreading și cum să o facă
multithreading - cod de proprietate al programului executat în paralel (simultan) pe mai multe nuclee de procesare (prin atribuirea fiecare fir de bază de execuție (o bucată de cod pe care el trebuie să trateze)) sau a efectuat un singur nucleu pseudo (fiecare fir are la dispoziție un timp în care el timp pentru a îndeplini o parte din codul lor de pe procesor). distribuția de flux pe mai multe nuclee se angajează în mod obișnuit Manager, dar dacă doriți în codul de program poate fi legat în mod clar fluxul de orice nucleu.
Asigurați-un program multi-threaded pot fi utilizați funcții de bibliotecă speciale, cum ar fi Boost și Intel TBB. În general:
- lansarea unei funcții de creare a unui flux și se trece codul care va transporta fluxul (un pointer la propria funcție, metoda)
- Noi folosim coduri de funcții de sincronizare bibliotecă a funcțiilor / metodelor
Există, de asemenea, metode mai simple, cum ar fi utilizarea API OpenMP standard, care permite paralelizare de piese individuale de cod, pur și simplu prin adăugarea de directive compilator, dar această metodă are limitele sale în cerere și nu este potrivit pentru toate aplicațiile.
* Acest răspuns oferă doar o înțelegere superficială a fluxului de implementare, așa cum a solicitat.