程序和執行緒的區別
程序:
- 正在執行的程式,是系統進行資源分配和呼叫的獨立單位;
- 每一個程序都有它自己的記憶體空間和系統資源。
執行緒:
- 是程序中的單個順序控制流,是一條執行路徑
- 一個程序如果只有一條執行路徑,則稱為單執行緒程式
- 一個程序如果有多條執行路徑,則稱為多執行緒程式
多程序的意義:
- 可以在同一個時間段內執行多個任務;
- 可以提高CPU的使用率;
多執行緒的意義:
- 是為了同步完成多項任務,不是為了提高執行效率,而是為了提高資源使用效率來提高系統的效率
併發與並行:
- 併發是物理上同時發生,指在同一時間點同時執行多個程式;
- 並行是邏輯上同時發生,指在同一時間段內執行多個程式;
程序和執行緒的關係:
- 一個執行緒只能屬於一個程序,而一個程序可以有多個執行緒,但至少有一個執行緒。
- 資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。
- 處理機分給執行緒,即真正在處理機上執行的是執行緒。
- 執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。
執行緒是指程序內的一個執行單元,也是程序內的可排程實體.
執行緒與程序的區別:
- 排程:執行緒作為排程和分配的基本單位,程序作為擁有資源的基本單位
- 併發性:不僅程序之間可以併發執行,同一個程序的多個執行緒之間也可併發執行
- 擁有資源:程序是擁有資源的一個獨立單位,執行緒不擁有系統資源,但可以訪問隸屬於程序的資源.
- 系統開銷:在建立或撤消程序時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於建立或撤消執行緒時的開銷。但是程序有獨立的地址空間,一個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是一個程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的地址空間,一個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差一些
問題一:
jvm虛擬機器的啟動是單執行緒的還是多執行緒的?為什麼?
解答:
多執行緒的。
會有垃圾回收的守護執行緒,否則會記憶體溢位,加上程式的主執行緒,所以至少有兩個執行緒;