從內核觀點看,進程的目的就是擔當分配系統資源(CPU時間、內存等)的實體。
進程是資源管理的最小單位,線程是程序執行的最小單位。在操作系統設計上,從進程演化出線程,最主要的目的就是更好的支持SMP以及減小(進程/線程)上下文切換開銷。
最初的進程定義都包含程序、資源及其執行三部分,其中程序通常指代碼,資源在操作系統層面上通常包括內存資源、IO資源、信號處理等部分,而程序的執行通常理解為執行上下文,包括對CPU的占用,后來發展為線程。**在線程概念出現以前,為了減小進程切換的開銷,操作系統設計者逐漸修正進程的概念,逐漸允許將進程所占有的資源從其主體剝離出來,允許某些進程共享一部分資源,例如文件、信號,數據內存,甚至代碼,這就發展出輕量進程的概念。**Linux內核在2.0.x版本就已經實現了輕量進程,應用程序可以通過一個統一的clone()系統調用接口,用不同的參數指定創建輕量進程還是普通進程。
Linux使用輕量級進程,對多線程應用程序提供更好的支持。兩個輕量級進程基本上可以共享一些資源,諸如地址空間、打開的文件等等。只要其中一個修改共享資源,另一個就立即查看這種修改。當然,當兩個線程訪問共享資源時必須同步它們自己。
在Linux中,一個線程組基本上就是實現了多線程應用的一組輕量級進程。