作業系統執行緒和Java執行緒的區別
在計算機程式設計中,執行緒是一段旨在由 CPU 排程並獨立於父程序執行的簡短指令序列。程式中可能同時有多個執行緒處於活動狀態,當任務完成或應用程式關閉時,程式會關閉或掛起這些執行緒。多執行緒 CPU 能夠同時執行多個執行緒。以下是作業系統執行緒和 Java 執行緒之間的區別。
Java 中的執行緒
在 Java 中,執行緒是程式執行期間遵循的流程或路徑。所有程式通常至少有一個主執行緒,該執行緒由 JVM(Java 虛擬機器)在程式執行開始時提供。當主執行緒獲得控制權時,現在由主執行緒呼叫 main() 方法。
程式的執行執行緒稱為執行緒。在 Java 虛擬機器上執行的程式可以同時執行多個執行緒。每個執行緒都有不同的優先順序。優先順序順序決定了哪些執行緒首先執行。
由於它允許在單個函式中執行多個操作,因此執行緒對於程式至關重要。程式計數器、堆疊和區域性變數通常對每個執行緒都是唯一的。
Java 提供兩種不同的建立執行緒的技術:
擴充套件 java.lang.class 的執行緒。
實現 Runnable 介面。
擴充套件 Java.lang.class
這是一個新類擴充套件了 Thread 類,生成該類的例項,這將導致建立執行緒。Thread 應該執行的功能包含在 run() 方法中。建立執行緒後,可以使用 start() 使其可執行。在 void run() 過程中,將啟動一個新執行緒。
實現 Runnable 介面
這是建立執行緒的最簡單方法。在這種情況下,開發一個類來實現 Runnable 介面和 run() 方法。始終在 run() 方法內部編寫執行緒執行程式碼。
start() 方法呼叫 void run() 方法。當呼叫 start() 時,將為執行緒提供一個新的堆疊,然後呼叫 run() 將執行緒引入程式。
什麼是作業系統執行緒?
執行緒是唯一的執行路徑。由於它是一個小型程序,因此作業系統可以將其安排與其他執行緒一起執行。執行緒由作業系統建立和管理,與建立它們的程式共享記憶體和資源。這使得多個執行緒能夠在單個應用程式內協作並有效地執行。
在程序內,執行緒是單個序列流。由於它們與程序共享某些特性,因此執行緒通常被稱為輕量級程序。每個執行緒僅屬於一個程序。在支援多執行緒的作業系統中,程序可以在一個程序下有多個執行緒。
執行緒型別
同一程序的每個執行緒都使用不同的程式計數器、啟用記錄堆疊和一組控制塊。使用執行緒可以提高程式的效能。
作業系統中存在兩種不同的執行緒型別:核心級執行緒和使用者級執行緒。
核心級執行緒
作業系統在核心級別實現和控制執行緒。
核心級執行緒是使用系統呼叫實現的,作業系統知道它們。
使用者級執行緒的建立和管理速度比核心級執行緒快。
核心級執行緒的上下文切換速度較慢。
一個核心級執行緒是否執行阻塞操作不會影響其他執行緒。例如 Window Solaris。
核心不知道使用者級執行緒,因為它們是由使用者實現和控制的。
使用者級執行緒
使用者級執行緒是使用使用者級庫建立的,作業系統不知道它們。
與核心級執行緒相比,使用者級執行緒更容易建立和維護。
使用者級執行緒的上下文切換速度更快。
如果只有一個使用者級執行緒執行阻塞任務,則整個程序將停止。例如 Java 執行緒、POSIX 執行緒等。
Java 執行緒和作業系統執行緒的區別
下表重點介紹了 Java 執行緒與作業系統執行緒的不同之處:
Java 執行緒 |
作業系統執行緒 |
|---|---|
在 Java 上下文中,執行緒是在程式執行期間遵循的路徑 |
作業系統能夠處理的最小處理單元是執行緒 |
Java 程式中至少存在一個執行緒,稱為主執行緒 |
一個程序可以有多個執行緒 |
在 Java 中,使用者執行緒和守護執行緒是兩種不同的執行緒型別 |
作業系統執行緒有兩種不同的型別:使用者級執行緒和核心級執行緒 |
在程式開始時,使用主執行緒呼叫 main() 方法時,它由 Java 虛擬機器 (JVM) 控制 |
作業系統負責管理它 |
執行緒通訊由 wait()、notify() 和 notifyAll() 方法提供便利 |
執行緒可以更輕鬆地通訊並交換通用資訊 |
監視器用於實現執行緒同步,同步塊用於阻塞 |
使用互斥體是實現執行緒同步的最常用方法 |
Java 虛擬機器 (JVM) 中的執行緒排程程式決定哪個執行緒應該執行。兩種型別分別是搶佔式排程和時間片 |
應用程式開發人員透過輕量級程序 (LWP) 將使用者級執行緒 (ULT) 排程到核心級執行緒 (KLT)。 系統排程程式將核心級執行緒排程以執行各種不同的作業系統功能。 |
結論
在 JVM 程序中執行的任何執行緒都稱為“Java 執行緒”。儘管具有不同的執行緒 ID,但作業系統執行緒都是程序的一部分的執行緒,並且共享相同的程序 ID 和父程序 ID。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP