程序:所謂的程序,是硬盤上的一個可執行文件,是靜態的。
進程:一個程序運行起來后,代碼加上用到的資源稱之為進程,它是操作系統分配資源的基本單元。
一個程序,對應進程可以有多個。
多任務不僅可以通過線程來實現,進程也是可以的。
進程的狀態
實際工作中,任務數往往大於 cpu 的核數,即一定有一些任務正在執行,而另外一些任務在等待 cpu 進行執行,因此導致了進程有不同的狀態。
- 就緒狀態:運行的條件都已經滿足,正在等在cpu執行。
- 執行狀態:cpu正在執行其功能。
- 等待狀態:等待某些條件滿足,例如一個程序sleep了,此時就處於等待態。
進程和線程的比較
- 進程,能夠完成多任務,比如在一台電腦上能夠同時運行多個QQ。
- 線程,能夠完成多任務,比如一個QQ中的多個聊天窗口。
定義的不同
進程是系統進行資源分配和調度的一個獨立單位。
線程是進程的一個實體,是 CPU 調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。
線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。
區別
一個程序至少有一個進程,一個進程至少有一個線程。
線程的划分尺度小於進程(資源比進程少),使得多線程程序的並發性高。
進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
線程不能夠獨立執行,必須依存在進程中,進程可以理解為工廠中的一條流水線,而其中的線程就是這個流水線上的工人。
優缺點
線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源的管理和保護;而進程正相反。