我理解的多程序,多執行緒

2021-07-26 13:06:58 字數 2033 閱讀 2270

這裡大致分兩個部分說明一下,

程序,執行緒,程序池,執行緒池,多程序和多執行緒;

jdk的executor多執行緒框架。

第一部分:

首先說一下我理解的這幾個概念:

程序:

系統分配資源的最小單元:也就是說,作業系統是按照乙個程序進行分配資源的,每個程序有自己的記憶體區域,別的程序看不到,這就引出了乙個問題,如果我程序a要引用程序b中某個功能,如何實現呢?採用的ipc(inter-process communication),即程序間通訊,這裡不多說,簡單的理解,就是乙個應用就是乙個程序;

執行緒:

執行緒就是任務執行的最小單元,比如:qq中,傳送訊息,檢視資料,這些操作,都可以使用乙個執行緒來完成,也就是說,乙個程序裡是由多個執行緒來具體完成操作的;

程序池:

就是預先準備好程序,當你要使用的時候,就不用自己來建立了,直接從預先建立好的程序池裡取出就行,程序池裡可以是固定數量,或者動態新增的;

執行緒池:

由於建立乙個執行緒,要消耗很多資源,比如cpu,記憶體等,故可以提前建立好一批執行緒,用來使用。

看到這兒,有人會發現,其實執行緒池和程序池的概念差不多,到底如何取捨,請看下面的比較:

第二部分:

在jdk中,可以使用executor來進行多執行緒的使用,主要有下面幾個類:

1,executor :介面,多執行緒中的頂級介面,只有乙個 execute(runnable run) 方法,由引數看出來,用來新增runnable 執行緒執行;

2,executorservice:介面,繼承了executor介面,並新增了自己的方法,比如:commit, destroy等等;

3,executors:類,是executor和executorservice的工廠類,最常用的有:

executors.newsinglethreadexecutor():建立單個執行緒

executors.newfixedthreadpool(int nthread); 建立固定數量的執行緒

executors.newcachedthreadpool(); 動態的建立執行緒,

具體**:

mythread類:

public

class

mythread

extends

thread

}

test類:

public

class test

}

結果:

pool-1

-thread-1

---在執行

pool-2

-thread-3

---在執行

pool-2

-thread-2

---在執行

pool-1

-thread-1

---在執行

pool-1

-thread-1

---在執行

pool-2

-thread-1

---在執行

pool-3

-thread-1

---在執行

pool-3

-thread-3

---在執行

pool-3

-thread-2

---在執行

從結果可以看出,a1,newsinglethreadexecutor,只 建立了乙個執行緒,而newfixedthreadpool和newcachedthreadpool都有3個執行緒在執行,但是newfixedthreadpool顯然有劣勢,因為他要提前設定好數量,而newcachedthreadpool,會根據你a3.execute(t3); 新增的thread類,自己建立和**,顯然更好些。

多執行緒與多程序的理解

參考 執行緒是最小的執行單元,而程序由至少乙個執行緒組成。如何排程程序和執行緒,完全由作業系統決定,程式自己不能決定什麼時候執行,執行多長時間。多程序和多執行緒的程式涉及到同步 資料共享的問題,編寫起來更複雜。在unix linux下,可以使用fork 呼叫實現多程序。要實現跨平台的多程序,可以使用...

多執行緒 多程序?

這幾天在思考如何改進原型在多個客戶端的情況下的效能,特地溫習了一下多程序和多執行緒的一些知識。在linux下程序的程序和執行緒在核心看來區別很小,都是乙個可排程單元,都擁有記憶體管理結構等等。但是關鍵的差別是程序的資源都是私有的,而執行緒則是和別人共享的,所以執行緒的上下文切換可能比程序的開銷要小很...

多程序,多執行緒

多工程式設計 通過應用程式利用多個計算機核心達到多工同時執行的 目的,從此來提公升程式執行效率 多程序,多執行緒 程序 程式在計算機中一次執行的過程 程式 靜態的描述,不占有計算機資源 程序 是乙個動態的過程,占有cpu,記憶體等計算機資源 有一定的生命週期 同乙個程式,每次執行都是不同的程序,因為...