線程和進程的區別


1、進程:進程在操作系統中可以獨立運行,作為資源分配的基本單位。表示運行中的程序。

2、線程:線程是進程中的一個實例,作為系統調度和分派的基本單位。是進程中的一段序列,能夠完成進程中的一個功能。

3、進程和線程的區別:

(1)同一個進程可以包含多個線程,一個進程中至少包含一個線程,一個線程只能存在於一個進程中。

(2)同一個進程下的所有線程能夠共享該進程下的資源。(系統運行時會為每個進程分配不同的內存區域,但不會為線程分配內存。線程只能共享它所屬進程的資源。)

(3)進程結束后,該進程下的所有線程將銷毀,而一個線程的結束不會影響同一進程下的其他線程。

(4)線程是輕量級的進程,它的創建和銷毀所需要的時間比進程小得多,所有操作系統的執行功能都是通過創建線程去完成的。

(5)線程在執行時是同步和互斥的,因為他們共享同一個進程下的資源。

(6)在操作系統中,進程是擁有系統資源的獨立單元,它可以擁有自己的資源。一般而言,線程不能擁有自己的資源,但是它能夠訪問其隸屬進程的資源。

  一個進程可以定義程序的一個實例。在Win32中,進程並不執行什么,它只是占據應用程序所使用的地址空間。為了讓進程完成一定的工作,進程必須至少占有一個線程,正是這個線程負責包含進程地址空間中的代碼。實際上,一個進程可以包含幾個線程,它們可以同時執行進程地址空間中的代碼。為了做到這一點,每個線程有自己的一組CPU寄存器和堆棧。每個進程中至少有一個線程在執行其地址空間中的代碼。如果沒有線程執行進程地址空間中的代碼,進程也就沒有繼續存在的理由,系統將自動清除進程及其地址空間。

4、一個進程是不是可以創建無限數量的線程?

  不是。

  操作系統給一個系統進程提供的空間是2GB ,而一個線程堆棧的空間默認在啟動的時候是1MB,理論上最大線程數=2GB/1MB=2048。但是內存當然不可能完全拿來作線程的棧,所以實際數目要比這個值要小。你也可以通過連接時修改默認棧大小,將其改的比較小,這樣就可以多開一些線程。如將默認棧的大小改成512K,這樣理論上最多就可以開4096個線程。

  如果是同一台機器內的話,能起多少線程也是受內存限制的。

5、線程的數量會受到什么限制?

  受內存限制。

6、線程在內存中會占用什么資源?

  線程擁有自己的私有內存。從深入理解虛擬機書中可知 JDK1.7中的線程私有內存包括JAVA虛擬機棧、本地方法棧、程序計數器,每當你創建一個新的線程那么它就擁有這一部分的空間。而系統分配給每個進程的內存是有限的,當創建的線程數過多,就會導致內存溢出。

 

轉載博客:https://www.cnblogs.com/toria/p/11123130.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM