1、進程:進程在操作系統中可以獨立運行,作為資源分配的基本單位。表示運行中的程序。
2、線程:線程是進程中的一個實例,作為系統調度和分派的基本單位。是進程中的一段序列,能夠完成進程中的一個功能。
3、進程和線程的區別:
(1)同一個進程可以包含多個線程,一個進程中至少包含一個線程,一個線程只能存在於一個進程中。
(2)同一個進程下的所有線程能夠共享該進程下的資源。(系統運行時會為每個進程分配不同的內存區域,但不會為線程分配內存。線程只能共享它所屬進程的資源。)
(3)進程結束后,該進程下的所有線程將銷毀,而一個線程的結束不會影響同一進程下的其他線程。
(4)線程是輕量級的進程,它的創建和銷毀所需要的時間比進程小得多,所有操作系統的執行功能都是通過創建線程去完成的。
(5)線程在執行時是同步和互斥的,因為他們共享同一個進程下的資源。
(6)在操作系統中,進程是擁有系統資源的獨立單元,它可以擁有自己的資源。一般而言,線程不能擁有自己的資源,但是它能夠訪問其隸屬進程的資源。
一個進程可以定義程序的一個實例。在Win32中,進程並不執行什么,它只是占據應用程序所使用的地址空間。為了讓進程完成一定的工作,進程必須至少占有一個線程,正是這個線程負責包含進程地址空間中的代碼。實際上,一個進程可以包含幾個線程,它們可以同時執行進程地址空間中的代碼。為了做到這一點,每個線程有自己的一組CPU寄存器和堆棧。每個進程中至少有一個線程在執行其地址空間中的代碼。如果沒有線程執行進程地址空間中的代碼,進程也就沒有繼續存在的理由,系統將自動清除進程及其地址空間。
4、一個進程是不是可以創建無限數量的線程?
不是。
操作系統給一個系統進程提供的空間是2GB ,而一個線程堆棧的空間默認在啟動的時候是1MB,理論上最大線程數=2GB/1MB=2048。但是內存當然不可能完全拿來作線程的棧,所以實際數目要比這個值要小。你也可以通過連接時修改默認棧大小,將其改的比較小,這樣就可以多開一些線程。如將默認棧的大小改成512K,這樣理論上最多就可以開4096個線程。
如果是同一台機器內的話,能起多少線程也是受內存限制的。
5、線程的數量會受到什么限制?
受內存限制。
6、線程在內存中會占用什么資源?