目錄
一、線程(Thread)的概念
二、線程存在的意義
2.1 并發編程
2.2 比進程更“輕量”
三、使用線程時應該注意
四、進程和線程的區別
五、Java中的線程和操作系統中的線程是不同的概念
六、多線程編程
一、線程(Thread)的概念
線程是操作系統中實現并發編程的一種基本結構。 |
線程可以被看作是運行在操作系統中的一個獨立的工作單元,?個線程就是?個 "執行流"。 |
每個線程之間都可以按照順序執行自己的代碼。多個線程之間 "同時" 執行著多份代碼。 |
線程的創建和執行由操作系統負責管理,程序員只需要提供線程執行的任務。 |
一個進程中可以有多個線程。每個線程也是由一個進程控制塊(PCB)進行描述的。 |
閱讀指針 -> 《什么是進程控制塊(PCB Process Control Block)?》
<JavaEE> 什么是進程控制塊(PCB Process Control Block)?-CSDN博客文章瀏覽閱讀23次。介紹進程控制塊和進程控制塊的核心屬性。進程控制塊適用于進程,也適用于線程。https://blog.csdn.net/zzy734437202/article/details/134583750
二、線程存在的意義
2.1 并發編程
線程可以提高程序的并發性能,充分利用多核CPU的資源。 |
特別是在處理I/O密集型任務時,有些場景需要等待IO,在等待IO時,可以將系統資源調度給其他任務使用。 |
當程序需要執行多個任務時,線程可以同時處理這些任務,從而提高程序的執行效率。 |
2.2 比進程更“輕量”
進程也可以進行并發編程,但線程比進程更輕量,線程在創建、調度和銷毀上,都要比進程快。 |
所以線程可以減輕CPU的負擔,提高程序的響應速度。 |
線程保持了獨立調度執行,支持并發的同時,省去了“分配資源”和“釋放資源”帶來的額外開銷。這意味著只有在第一個線程,也就是進程創建時才需要申請系統資源,后續線程的創建則不再需要重新申請系統資源了。 |
三、使用線程時應該注意
注意以下幾點 | 說明 |
線程并非越多越好 | 線程數量太多時,會加劇線程間對有限的CPU資源的競爭,這增加了資源調度的開銷,降低了執行效率。 |
資源共享存在副作用 | 進程和進程之間不會互相影響,但如果同一個進程中的某一個線程拋出異常,這個進程中的其他線程也會受到影響,這就可能導致整個進程異常終止。 |
線程安全問題 | 線程之間可能互相干擾沖突,導致代碼出現邏輯錯誤。線程安全問題也是并發編程的重點和難點。 |
四、進程和線程的區別
(1)進程包含線程。每一個進程至少有一個線程,這個線程被稱為主線程。 |
(2)進程和進程之間不共享內存空間,每個進程都有自己的資源。同一個進程的線程之間共享同一分資源,如內存空間、文件描述符表等,每個線程都是一個獨立的執行流,單獨參加到CPU的調度中。 |
(3)進程是系統分配資源的最小單位,線程是系統調度的最小單位。 |
(4)一個進程發生異常一般不會影響到其他進程。但是一個線程出現異常,則可能導致同進程內的其他線程也發生異常,最終可能導致包含這個線程的進程也出現異常。 |
五、Java中的線程和操作系統中的線程是不同的概念
操作系統中的線程 | 線程是操作系統中的概念。操作系統內核實現了線程機制,并對用戶岑提供了供用戶使用的線程相關API。 |
Java中的線程 | Java標準庫中的Thread類是對操作系統提供的API進行了進一步的抽象和封裝。 |
六、多線程編程
多線程程序和非多線程程序的區別和優勢在于,多線程每個線程都是一個獨立的執行流,多個線程可以并發執行,增加了程序運行速度,提高了程序的運行效率。 |
許多語言都是支持多進程并發編程,也支持多線程并發編程。但是,在Java中,更鼓勵多線程并發編程。 |
因為在Java標準庫中,很多多進程編程的相關API都沒有提供,而多線程編程的API都有封裝提供。 |
更重要的是,在Java中每啟動一個進程,就要啟動一次Java虛擬機,這加大了多進程編程的系統開銷。 |
因此在Java中,更推薦多線程并發編程。 |
閱讀指針 -> 《介紹 線程類 Thread 》
鏈接生成中.........