Ceea ce este tehnic diferența între un proces și un fir?
Am sentimentul că un cuvânt ca 'procesul de' este suprasolicitat și există, de asemenea, hardware-ul și software-ul de fire. Cât despre lumină-greutate procese în limbi, cum ar fi Erlang? Există un motiv definitiv pentru a folosi un termen în locul celuilalt?
Ambele procese și fire sunt independent secvențe de execuție. Tipic diferență este că firele (de același proces) a alerga într-o memorie partajată spațiu, în timp ce procesele rula în spații de memorie separate.
Am'm nu sunt sigur ce "hardware" vs "software" fire s-ar putea referi. Firele sunt un mediu de operare caracteristică, mai degrabă decât un PROCESOR caracteristică (desi PROCESORUL are de obicei operațiunile care fac fire eficient).
Erlang folosește termenul "procesul de" deoarece nu expune un shared-memory multiprogramming funcționarea model. Numindu-le "fire" ar însemna că au memorie partajată.
Proces Fiecare proces oferă resursele necesare pentru a executa un program. Un proces are un spațiu de adrese virtuale, cod executabil, mânere deschise la obiecte de sistem, un context de securitate, un proces unic de identificare, variabilele de mediu, o clasă de prioritate, minimă și maximă de lucru stabilit dimensiunile, și cel puțin un fir de execuție. Fiecare proces este pornit cu un singur fir, adesea numit primar thread, dar poate crea și alte fire de la oricare dintre firele sale.
Ață Un fir este o entitate într-un proces care poate fi programat pentru execuție. Toate firele de executie ale unui proces partaja spațiu de adrese virtuale și de resurse de sistem. În plus, fiecare fir menține excepție stivuitoare, o prioritate programarea, thread local storage, un fir unic de identificare, și un set de structuri sistemul va folosi pentru a salva context fir până când este programată. Firul context include thread's set de mașină registre, stiva nucleu, un fir mediu de bloc, și un utilizator stivă în spațiul de adrese al firului's proces. Fire pot, de asemenea, au propriile lor context de securitate, care pot fi utilizate pentru rolurile de clienti.
Am găsit asta pe MSDN aici: Despre Procese și Fire
Microsoft Windows acceptă preemptive multitasking, care creează efectul de executarea simultană a mai multe fire de mai multe procese. Pe un calculator multiprocesor, sistemul poate executa simultan cât mai multe fire ca sunt procesoare de pe computer.
Proces:
Filet:
Am împrumutat de mai sus informații de la Cunoașterea Quest! blog.
În primul rând, să's se uite la aspectul teoretic. Ai nevoie pentru a înțelege ceea ce un proces este conceptual pentru a înțelege diferența dintre un proces și un fir și ce's partajate între ele.
Avem următoarele opțiuni din secțiunea 2.2.2 Clasice Fir Model în Sisteme de Operare Moderne 3e de Tanenbaum:
procesul modelul se bazează pe două concepte independente: resurse gruparea și execuție. Uneori este utilizatful pentru a le separa; acest lucru este în cazul în care fire vin în....
El continuă:
Un mod de a privi un proces este că acesta este un mod de a grup de resurse legate împreună. Un proces are un spațiu de adrese conține programul de text și date, precum și alte resurse. Aceste resurse pot include fișiere deschise, procesele-copil, în curs de alarme, semnal stivuitoare, informațiile contabile, și mai mult. Punându-le împreună sub forma unui proces, acestea pot fi gestionate mai ușor. un alt concept-un proces a este un fir de execuție, de obicei, scurtat la doar firul. Firul are un program counter, care ține evidența care instruction să execute în continuare. Acesta a registrelor, care țineți sale curente de lucru variabile. Ea are o stivă, care conține executarea de istorie, cu un singur cadru, pentru fiecare prdure-a sunat, dar nu s-a întors. Deși un fir trebuie să se execute într-un proces, fir și procesul sunt concepte diferite și pot fi tratate separat. Procesele sunt utilizate pentru a grupa resurse împreună; fire sunt entități programate pentru execuție pe CPU.
Mai jos oferă următorul tabel:
Per process items | Per thread items
------------------------------|-----------------
Address space | Program counter
Global variables | Registers
Open files | Stack
Child processes | State
Pending alarms |
Signals and signal handlers |
Accounting information |
Las's se ocupe cu hardware multithreading problema. Clasic, un PROCESOR ar sprijini un singur fir de execuție, menținerea thread's de stat prin intermediul unui singur program counter, și un set de registre. Dar ce se întâmplă dacă nu's un cache miss? Este nevoie de o lungă perioadă de timp pentru a prelua date din memoria principală, și în timp ce faptul că's-a întâmplat PROCESORUL este doar stând acolo inactiv. Deci, cineva a avut ideea să practic două seturi de fire de stat ( PC + registre), astfel încât un alt thread ( poate în același proces, poate într-un alt proces ) pot obține locul de muncă făcut în timp ce celălalt fir este în așteptare în memoria principală. Acolo sunt mai multe nume și implementări ale acestui concept, cum ar fi HyperThreading și Simultaneous Multithreading ( SMT pentru scurt ).
Acum las's se uite la partea de software. În principiu, există trei moduri în care firele de executie pot fi puse în aplicare pe partea de software.
Tot ce ai nevoie pentru a pune în aplicare fire este abilitatea de a salva de stat CPU și menține mai multe stive, care pot, în multe cazuri, să fie realizat în spațiul utilizator. Avantajul de spațiu utilizator fire este super rapid fir de comutare din moment ce tu nu't trebuie să prindă în kernel-ul și capacitatea de a programa fire așa cum vă place. Cel mai mare dezavantaj este incapacitatea de a face blocking I/O ( care ar bloca întregul proces și-l's de utilizator fire ), care este unul dintre marile motive pentru care folosim fire în primul rând. Blocking I/O folosind fire simplifică foarte mult de design de program în multe cazuri.
Kernel fire au avantajul de a fi capabil de a utiliza blocarea I/O, în plus față de a lăsa toate problemele de planificare a sistemului de OPERARE. Dar fiecare fir comutator necesită capcane în kernel, care este potențial relativ lent. Cu toate acestea, dacă te're comutare fire pentru că a blocat I/O e't într-adevăr o problemă, deoarece operațiunea de I/O, probabil, prins în kernel deja oricum.
O altă abordare este de a combina cele două, cu mai multe fire de kernel fiecare având utilizatorului mai multe fire.
Deci, revenind la întrebarea dvs. de terminologie, puteți vedea că un proces și un fir de execuție sunt două concepte diferite și alegerea dumneavoastră de termen care să o utilizați depinde de ceea ce ai're vorbesc despre. În ceea ce privește termenul de "lumina proces greutate", nu't personal văd rostul în a de't într-adevăr transmite ceea ce's întâmplă, precum și termenul de "fir de execuție".
Pentru a explica mai mult cu privire la programare concurentă
Un proces are o auto-conținută mediu de executie. Un proces, în general, are o finaliza, privat set de bază run-time resurse; în special, fiecare proces are propriul spațiu de memorie.
Fire există într-un proces — fiecare proces are cel puțin unul. Fire partaja procesul de's resurse, inclusiv de memorie și de a deschide fișierele. Acest lucru face ca pentru eficienta, dar potențial problematice, de comunicare.
Păstrarea persoana medie în minte,
Pe computer, deschideți Microsoft Word și browser-ul web. Noi numim aceste două procese.
În Microsoft word, tastați un lucru și acesta devine în mod automat salvate. Acum, ai fi observat editarea și salvarea se face în paralel - editarea pe un singur fir și salvarea pe alte thread.
O aplicație este format din unul sau mai multe procese. Un proces, în termeni simpli, este un program executabil. Unul sau mai multe fire pentru a rula în contextul procesului. Un fir este unitatea de bază pentru care sistemul de operare alocă timp de procesor. Un fir poate executa orice parte a procesului de cod, inclusiv părți, în prezent fiind executate de către un alt thread. O fibră este o unitate de executie, care trebuie să fie manual programat de către aplicație. Fibrele rula în contextul fire care le programați.
Furat de aici.
Un proces este o colecție de cod, de memorie, de date și alte resurse. Un fir este o secvență de cod care este executat în aplicare a procesului. Puteți (de obicei) au mai multe fire de executare concomitent, în cadrul aceluiași proces.
Proces:
Exemplu:
Spune, deschidere orice browser (mozilla, Chrome, IE). În acest moment noul proces va începe să se execute.
Subiecte:
Exemplu:
Deschiderea mai multor tab-uri in browser.
Ambele procese și fire sunt independent secvențe de execuție. Tipic diferență este că firele (de același proces) a alerga într-o memorie partajată spațiu, în timp ce procesele rula în spații de memorie separate.
Procesul
Este un program în execuție. ea are o secțiune de text am.e codul de program, activitatea curentă reprezentată de valoarea de program counter & conținut de procesoare registru. Acesta include, de asemenea, procesul de stivă care conține date temporare(cum ar fi parametrii funcției, a reveni abordate și variabile locale), și secțiunea de date, care conține variabilele globale. Un proces poate include, de asemenea, o grămadă, care este memoria care este alocat dinamic în timpul procesului de timp a alerga.
Fir
Un fir este o unitate de bază de CPU utilizare; acesta cuprinde un fir de IDENTITATE, un program contra, inscrieti-a stabilit, și o stivă. o comună cu alte fire care aparțin aceluiași proces de codul secțiune, secțiunea de date și alte resurse de sistem de operare, cum ar fi fișierele deschise și semnale.
Ambele fire și procese sunt unități atomice de OPERARE, de alocare a resurselor (de exemplu, există o concurență model descrie modul CPU timpul este împărțit între ei, și modelul de a deține alte sisteme de OPERARE, resurse). Există o diferență în:
Greg Hewgill de mai sus a fost corectă despre Erlang sens al cuvântului "procesul", și aici's o discuție de ce Erlang putea face procese usoare.
Încercând să răspundă la această întrebare referitoare la Java lume.
Un proces este o execuție a unui program, ci un thread este un singur execuție secvență în cadrul procesului. Un proces poate conține mai multe fire. Un fir este uneori numit un ușor de proces.
De exemplu:
Exemplul 1: Un JVM se execută într-un singur proces și fire într-un JVM partaja morman de apartenență la acest proces. Care este motivul pentru care mai multe fire pot avea acces la același obiect. Fire partaja grămadă și au propriul lor spațiu de stivă. Acest lucru este cât un fir de invocare de metodă și variabilele sale locale sunt păstrate fir în condiții de siguranță de la alte fire. Dar heap nu este thread-safe și trebuie să fie sincronizate pentru firul de siguranță.
Exemplul 2: Un program ar putea să nu fi capabil de a trage imagini de citire de la tastatura. Programul trebuie să dea o atenție deplină la intrare de la tastatură și lipsit de capacitatea de a gestiona mai mult de un eveniment la un moment dat va duce la probleme. Soluția ideală pentru această problemă este executarea fără probleme a două sau mai multe secțiuni ale unui program, în același timp. Fire ne permite să facem acest lucru. Aici Desen imagine este un proces și lectură de taste este sub proces (fir).
http://lkml.iu.edu/hypermail/linux/kernel/9608/0191.html
Linus Torvalds ([email protected])
Vi, 6 Aug 1996 12:47:31 +0300 (EET DST)
Mesaje clasificate în funcție de: [ data ][ fir ][ subiect ][ autor ]
Următorul mesaj: Bernd P. Ziller: "Re: Oops, în get_hash_table"
mesajul Anterior: Linus Torvalds: "Re: I/O cerere de comanda"
On Mon, 5 Aug 1996, Petru P. Eiserloh a scris:
Avem nevoie de a păstra un clar conceptul de fire. Prea mulți oameni par să confunde un fir cu un proces. Următoarea discuție nu reflectă starea actuală de linux, ci mai degrabă este un încerca să rămână la un nivel ridicat de discuții.
NU!
NU Există nici un motiv să cred că "fire" și "procese" sunt entități separate. Ca'cum se's a făcut în mod tradițional, dar am personal cred că's o mare greșeală să gândești așa. Singura un motiv să cred că așa este bagaj istoric.
Ambele fire și procese sunt într-adevăr doar un singur lucru: o "context de executarea". Încercarea de a artificial distinge diferite cazuri este doar auto-limitare.
A "context de execuție", prin prezenta numit COE, este doar un conglomerat de de toate de stat de care COE. Acest stat include lucruri cum ar fi CPU de stat (registre etc.), MMU de stat (pagina mapări), permisiunea de stat (uid, gid) și diverse "comunicare ale americii" (deschis fișiere, semnal stivuitoare etc). În mod tradițional, diferența dintre o "fir" și un "procesul de" a fost, în principal, ca o fire are PROCESOR de stat (+ eventual un alt stat minimal), în timp ce toate celelalte context vine de la proces. Cu toate acestea, ca's doar one mod de a imparti stat total al COE, și nu există nimic care spune că-l's modul corect de a face asta. Limitarea tine pentru acest tip de imagine este pur și simplu prost.
mod de Linux crede despre acest lucru (și cum vreau lucruri la locul de muncă) este că nu is nu există un astfel de lucru ca un "procesul de" sau "fir". Există numai totalitatea de COE (numit "sarcina" de Linux). Diferite COE's puteți împărtăși piese de contextul lor cu alte fiecare, și unul subset de că schimbul este tradițional "fir"/"procesul de" configurare, dar care ar trebui să fie văzut ca DOAR un subset (it's un subset important, dar că importanța nu vine de la design, dar la standarde: vom clar că vreau să fug standarde conforme fire programe pe partea de sus de Linux de asemenea).
pe scurt: NU design jurul thread/proces de gândire. La kernel ar trebui să fie conceput în jurul valorii COE mod de gândire, și apoi fire de executie library poate exporta limitat pthreads interfață pentru utilizatori care doresc să utilizeze acest mod de a privi COE's.
Doar ca un exemplu de ceea ce devine posibil atunci când te gândești COE ca s-a opus la thread/proces:
- puteți face un externă "cd" program, ceva care este în mod tradițional imposibil în UNIX și/sau de proces/thread (exemplu prost, dar ideea este că puteți avea aceste tipuri de "module de" care sunt't limitat la tradiționale UNIX/fire de configurare). Fă-o:
clona(CLONE_VM|CLONE_FS);
copil: execve("extern-cd");
/ la "execve()" va disocia VM, deci singurul motiv pentru care am folosit CLONE_VM a fost de a face act de clonare mai repede /
- puteți face "vfork()" în mod natural (se meeds minim de suport kernel, dar că sprijinul se potrivește CUA mod de gândire perfect):
clona(CLONE_VM);
copil: continua să ruleze, în cele din urmă execve()
mama: așteptați pentru execve
- puteți face extern "IO, demonii,":
clona(CLONE_FILES);
copil: open file descriptori etc.
mama: utilizați fd's copilul a deschis și vv.
Toate lucrările de mai sus pentru că nu - 't legat de thread/proces mod de gândire. Cred că de un server web, de exemplu, în cazul în care CGI script-uri sunt facute ca "fire de execuție". Puteți't face asta cu tradiționale de fire, pentru că tradițional fire au întotdeauna de a împărtăși întregul spațiu de adrese, deci'd-au la link-ul din tot ce ai a vrut să facă în serverul de web în sine (un "fir" poate't rula un alt executabil).
Gândește-te la asta ca la o "context de execuție" problemă în schimb, sarcini poate acum a ales să execute programe externe (= a separa spațiu de adrese de la mamă) etc, dacă vor, sau poate pentru de exemplu împărtășească totul cu părintele except pentru fișier descriptori (astfel încât sub-"fire" poate deschide o mulțime de fișiere, fără a părintele a fi nevoie să vă faceți griji despre ele: se închide automat atunci când sub"fir" ieșirile, și nu't folosi fd's în părinte).
Cred că de un filetate "inetd", de exemplu. Vrei aeriene low furculita+exec, deci cu Linux cum puteți în loc de a folosi un "fork()" scrie un multi-threaded inetd în cazul în care fiecare fir este creat cu doar CLONE_VM (a partaja spațiu de adrese, dar don't împărtășească descriptorii de fișier etc). Apoi copilul poate execve dacă ar fi fost un serviciu extern (rlogind, de exemplu), sau poate a fost unul dintre internă inetd servicii (echo, timeofday) în cazul în care este doar o face's lucru și ieșirile.
Nu poate't face asta cu "fir"/"procesul".
Linus
Diferența între Fir și Procesul?
Un proces este o instanță de executare o cerere și Un fir este o cale de execuție în cadrul unui proces. De asemenea, un proces poate conține mai multe fire.Este important să rețineți că un fir poate face nimic-un proces pot face. Dar când un proces poate consta din mai multe fire, un fir ar putea fi considerat un "ușoare" proces. Astfel, diferența esențială între un subiect și un proces este munca pe care fiecare dintre ele este utilizat pentru a realiza. Fire sunt folosite pentru sarcini mici, întrucât procese sunt utilizate pentru mai "grea" sarcini – practic executarea de aplicații.
O altă diferență între un subiect și un proces este că firele în cadrul aceluiași proces partajează același spațiu de adrese, întrucât diferite procese nu. Aceasta permite fire să citească și să scrie de la aceleași structuri de date și variabile, și, de asemenea, facilitează comunicarea între fire. Comunicarea între procese – de asemenea, cunoscut sub numele de IPC, sau comunicare inter-proces – este destul de dificil și consumatoare de resurse.
Aici este un rezumat al diferențelor între fire și procese:
Firele sunt mai ușor de a crea decât procesele de când au don't necesită un spațiu de adrese separat.
Multithreading necesită o atentă programare din fire partaja date strucures că ar trebui să fi modificat numai printr-un singur fir la un moment dat. Spre deosebire de fire, procese don't împărtășesc aceeași spațiu de adrese.
Firele sunt considerate ușoare, deoarece acestea folosesc departe mai puține resurse decât procese.
Procesele sunt independente una de cealaltă. Fire, deoarece acestea partajează același spațiu de adrese sunt interdependente, astfel încât precauție trebuie să fie luate astfel încât fire diferite don't pas pe fiecare alte. Acest lucru este într-adevăr un alt mod de a afirma #2 de mai sus.
Un proces poate consta din mai multe fire.
Din punctul de vedere al unui reporter, sunt de fapt doar 3 lucruri principale pe care vreau să aud, pe lângă lucrurile evidente ca un proces poate avea mai multe fire:
Dacă vrei mai mult, Scott Langham's de răspuns destul de mult acoperă totul. Toate acestea sunt, din perspectiva unui sistem de operare. Limbi diferite pot implementa diferite concepte, cum ar fi sarcinile, lumina ce fire și așa mai departe, dar acestea sunt doar moduri de a folosi fire (de fibre pe Windows). Nu există hardware și software fire. Există hardware și software excepții și întrerupe, sau user-mode și kernel fire.
Următoarele este ceea ce am primit de la unul dintre articolele de pe Codul Proiectului. Cred ca asta explica tot ce este necesar în mod clar.
Un fir este un alt mecanism pentru divizarea volumului de muncă în separate executarea fluxuri. Un fir este mai ușor în greutate decât un proces. Asta înseamnă, oferă mai multă flexibilitate decât un intreg proces, dar poate fi inițiat mai repede, deoarece există mai puțin de Sistemul de Operare pentru a set-up. Atunci când un program este format din două sau mai multe fire, toate fire împărtășesc un singur spațiu de memorie. Procesele sunt date separate de spații de adrese. toate firele partaja o singură grămadă. Dar fiecare fir este dat de propria sa stivă.
Încercarea de a răspunde la Kernel-ul Linux's sistem de OPERARE de Vedere
Un program devine un proces, atunci când a lansat în memorie. Un proces are propriul spațiu de adrese sensul având diferite segmente în memorie cum ar fi .text segement pentru stocarea de cod compilat, .bss pentru stocarea neinitializata statice sau variabile globale, etc. Fiecare proces va avea propriul program counter și user-spcae stiva. În interiorul nucleului, fiecare proces va avea propriul stiva kernel (care este separat de spațiul utilizator stivă pentru probleme de securitate) și o structură numită task_struct
care este, în general, captate ca procesul de control bloc, stocarea tuturor informațiilor cu privire la proces, cum ar fi prioritatea sa, de stat,(și o mulțime de alte parte). Un proces poate avea mai multe fire de execuție.
Vine de la fire, își au reședința în interiorul unui proces și accesul la spațiul de adrese al procesului părinte, împreună cu alte resurse care pot fi transmise în timpul crearea de fir, cum ar fi fișiere de resurse, schimbul de până semnale, schimbul de date(variabile și instrucțiuni), prin urmare, de a face fire ușor și, prin urmare, care să permită mai rapid de comutare context. În interiorul nucleului, fiecare fir are propria stiva kernel împreună cu task_struct structura care definește fir. Prin urmare, kernel vedere fire de același proces ca entități diferite și sunt schedulable în ei înșiși. Fire în același proces comun de identitate numit ca thread id-ul grupului(
tgid), de asemenea, au un id unic numit ca id-ul procesului (
pid`).
Proces: program în curs de execuție este cunoscut sub numele de proces
Ață: Fir este o funcționalitate care este executat cu cealaltă parte din program bazat pe conceptul de "unul cu celălalt"deci, firul este o parte a procesului..