當我學習web後端編程時,我對Linux中使用的一些術語頗爲困惑。Linux中「進程」,「線程」,「任務」和「作業」之間的區別和關係是什麼?
- Linux中「process」,「threads」,「task」和「jobs」之間的區別和關係是什麼?
當我學習web後端編程時,我對Linux中使用的一些術語頗爲困惑。Linux中「進程」,「線程」,「任務」和「作業」之間的區別和關係是什麼?
進程和線程之間的區別對於所有操作系統都是相當通用的。一個進程通常代表一個具有自己的內存區域,系統資源和調度槽的獨立執行單元。
線程通常是進程內的「分支」 - 線程通常共享相同的內存和操作系統資源,並共享分配給該進程的時間。例如,當您打開瀏覽器和Microsoft Word時,每個都是不同的過程,但每個過程中發生的事情(如動畫,刷新或備份)都可以是線程。
作業通常是由用戶執行的長時間運行的工作單元。這項工作可能由一個或多個流程「處理」。它可能不是互動的。例如,指示機器壓縮大文件或在大型輸入文件上運行某些處理腳本通常是一項工作。命名是相對歷史性的 - 大型機用於處理作業。在UNIX系統中,許多作業使用cron在預定時間自動啓動,因此您有'cron作業'的概念。
因此,一個過程是一個單一的程序。它至少有一個線程,也許更多。每個線程都需要一個調度程序插槽,但調度程序在分配CPU到線程方面有所不同;在任何情況下,線程的重點都是讓一個進程並行地完成多件事情。線程共享各種系統資源,特別是內存,文件和套接字。
作業和任務是unix shell的概念;作業是一個運行的shell,它仍在運行,暫停或在後臺運行。在bash
手冊中有關於「作業控制」的很長一段。工作和任務大致相同的概念。