„Diferența dintre proces și fir” este una dintre întrebările pe scară largă ale interviurilor tehnice. Atât procesele, cât și firele sunt legate între ele și sunt foarte asemănătoare, prin urmare creează confuzie pentru a înțelege diferențele dintre ambele. Procesul și threadul sunt o secvență independentă de execuție, dar ambele sunt diferențiate într-un mod în care procesele se execută în spații de memorie diferite, în timp ce firele de execuție ale aceluiași proces se execută în spațiul de memorie partajat.
În acest subiect, vom înțelege scurta introducere a proceselor și firelor și care sunt alte diferențe între ambele.
Ce este Procesul?
Un proces este o instanță a unui program care se execută. Când rulăm un program, acesta nu se execută direct. Este nevoie de ceva timp pentru a urma toți pașii necesari pentru a executa programul, iar urmarea acestor pași de execuție este cunoscută ca proces.
Un proces poate crea alte procese pentru a efectua mai multe sarcini simultan; procesele create sunt cunoscute ca clonare sau proces copil , iar procesul principal este cunoscut sub numele de procesul părinte . Fiecare proces conține propriul spațiu de memorie și nu îl partajează cu celelalte procese. Este cunoscută ca entitatea activă. Un proces tipic rămâne în forma de mai jos în memorie.
Un proces în sistemul de operare poate rămâne în oricare dintre următoarele stări:
Cum funcționează procesele?
Când începem să executăm programul, procesorul începe să-l proceseze. Este nevoie de următorii pași:
- În primul rând, programul este încărcat în memoria computerului în cod binar după traducere.
- Un program necesită memorie și alte resurse ale sistemului de operare pentru a-l rula. Resursele, cum ar fi registrele, contorul de programe și o stivă, și aceste resurse sunt furnizate de sistemul de operare.
- Un registru poate avea o instrucțiune, o adresă de stocare sau alte date necesare procesului.
- Contorul de programe menține urmărirea secvenței programului.
- Stiva are informații despre subrutinele active ale unui program de calculator.
- Un program poate avea diferite instanțe ale acestuia și fiecare instanță a programului care rulează este cunoscută ca proces individual.
Caracteristicile procesului
- De fiecare dată când creăm un proces, trebuie să facem un apel de sistem separat pentru fiecare proces către sistemul de operare. The furculiţă Funcția () creează procesul.
- Fiecare proces există în propria sa adresă sau spațiu de memorie.
- Fiecare proces este independent și tratat ca un proces izolat de către sistemul de operare.
- Procesele au nevoie de IPC (Inter-process Communication) pentru a comunica între ele.
- Nu este necesară o sincronizare adecvată între procese.
Ce este Thread?
Un fir este subsetul unui proces și este cunoscut și sub denumirea de proces ușor. Un proces poate avea mai multe fire de execuție, iar aceste fire sunt gestionate independent de către planificator. Toate firele dintr-un proces sunt interconectate între ele. Firele au câteva informații comune, cum ar fi segment de date, segment de cod, fișiere etc., care este partajat cu firele de discuții. Dar conține propriile registre, stivă și contor.
Cum funcționează firul?
După cum am discutat, un fir este un subproces sau o unitate de execuție în cadrul unui proces. Un proces poate conține un singur fir la mai multe fire. Un fir funcționează după cum urmează:
- Când începe un proces, sistemul de operare îi alocă memoria și resursele. Fiecare fir dintr-un proces partajează numai memoria și resursele procesului respectiv.
- Threadurile sunt utilizate în principal pentru a îmbunătăți procesarea unei aplicații. În realitate, doar un singur thread este executat la un moment dat, dar datorită schimbării rapide a contextului între fire dă iluzia că firele rulează paralel.
- Dacă un singur thread se execută într-un proces, este cunoscut ca un singur fir Și dacă mai multe fire de execuție se execută simultan, atunci este cunoscut ca multithreading.
Tipuri de fire
Există două tipuri de fire, care sunt:
generator de valori aleatorii în java
1. Thread la nivel de utilizator
După cum sugerează și numele, firele de execuție la nivel de utilizator sunt gestionate doar de utilizatori, iar nucleul nu are informațiile sale.
Acestea sunt mai rapide, ușor de creat și gestionat.
Nucleul ia toate aceste fire ca un singur proces și le gestionează ca un singur proces.
Firele de execuție la nivel de utilizator sunt implementate de bibliotecile la nivel de utilizator, nu de apelurile de sistem.
2. Fir la nivel de kernel
Firele de execuție la nivel de nucleu sunt gestionate de sistemul de operare și gestionate de nucleul acestuia. Aceste fire sunt mai lente decât firele la nivel de utilizator, deoarece informațiile de context sunt gestionate de kernel. Pentru a crea și implementa un fir de execuție la nivel de kernel, trebuie să facem un apel de sistem.
Caracteristicile Thread
- Firele de execuție partajează date, memorie, resurse, fișiere etc., cu firele lor egale în cadrul unui proces.
- Un apel de sistem este capabil să creeze mai multe fire.
- Fiecare thread are propriul său stivă și registru.
- Threadurile pot comunica direct între ele, deoarece împart același spațiu de adrese.
- Threadurile trebuie sincronizate pentru a evita scenariile neașteptate.
Diferențele cheie între proces și fir
- Un proces este independent și nu este conținut în alt proces, în timp ce toate firele sunt conținute în mod logic într-un proces.
- Procesele sunt puternic ponderate, în timp ce firele sunt ponderate.
- Un proces poate exista individual, deoarece conține propria sa memorie și alte resurse, în timp ce un fir nu poate avea existența sa individuală.
- Nu este necesară o sincronizare adecvată între procese. În schimb, firele de execuție trebuie sincronizate pentru a evita scenariile neașteptate.
- Procesele pot comunica între ele folosind numai comunicarea între procese; în contrast, firele de execuție pot comunica direct între ele, deoarece împart același spațiu de adrese.
Tabel de diferențe între proces și fir
Proces | Fir |
---|---|
Un proces este o instanță a unui program care este executat sau procesat. | Thread-ul este un segment al unui proces sau un proces ușor care este gestionat de către planificator independent. |
Procesele sunt independente unele de altele și, prin urmare, nu împărtășesc o memorie sau alte resurse. | Firele sunt interdependente și împărtășesc memorie. |
Fiecare proces este tratat ca un proces nou de către sistemul de operare. | Sistemul de operare preia toate firele de execuție la nivel de utilizator ca un singur proces. |
Dacă un proces este blocat de sistemul de operare, celălalt proces poate continua execuția. | Dacă orice fir de execuție la nivel de utilizator este blocat, toate firele de execuție egale sunt, de asemenea, blocate, deoarece sistemul de operare le ia pe toate ca un singur proces. |
Schimbarea contextului între două procese necesită mult timp, deoarece acestea sunt grele în comparație cu firele. | Comutarea contextului între fire este rapidă, deoarece acestea sunt foarte ușoare. |
Segmentul de date și segmentul de cod al fiecărui proces sunt independente de celălalt. | Thread-urile partajează segmentul de date și segmentul de cod cu firele lor de execuție; prin urmare, sunt aceleași și pentru alte fire. |
Sistemul de operare durează mai mult timp pentru a termina un proces. | Firele pot fi terminate în foarte puțin timp. |
Crearea unui nou proces necesită mai mult timp, deoarece fiecare proces nou necesită toate resursele. | Un fir are nevoie de mai puțin timp pentru creare. |