Java的線程與進程
1、定義:
-
進程:具有一定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位。
-
線程:進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。
2、兩者關係:
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以併發執行。相對進程而言,線程是一個更加接近於執行體的概念,它可以與同進程中的其他線程共享數據,但擁有自己的棧空間,擁有獨立的執行序列。
3、區別:
核心:進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位。
- 在內存方面的區別:進程和線程的主要差別在於它們是不同的操作系統資源管理方式。進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變量的併發操作,只能用線程,不能用進程。
- 所以,一個程序至少有一個進程,一個進程至少有一個線程。
4、多線程:
這個程序(一個線程運行時產生了不止一個線程)
4.1、並行與併發
參考博文:
https://blog.csdn.net/kuangsonghan/article/details/80674777
https://www.cnblogs.com/lgk8023/p/6430592.html
https://www.cnblogs.com/wxd0108/p/5479442.html