程式與執行緒詳解
本部落格分以下幾個部分來闡述程式與執行緒
1、程式的概念很抽象?那麼什麼是程式呢?
2、開啟一個程式,作業系統會做哪些工作?
3、既然程式也可以使多個程式能併發執行,為什麼還需要執行緒?
4、程式與執行緒有哪些聯絡呢?
什麼是程式?
- 程式是計算機程式從啟動到結束的過程。
- 那麼什麼是計算機程式呢? 我們常見的QQ、微信、英雄聯盟這些軟體都是一個計算機程式,(可以說我們從開啟QQ到關閉QQ就是一段程式)。
不難理解,這些計算機程式是由程式碼,以及圖片、音訊、jar包等必要的資原始檔組成的。
開啟一個程式,作業系統會做哪些工作呢?
- ①程式的ID號。當作業系統收到我們要開啟QQ程式的時候,作業系統會給QQ程式一個ID號,我們可以通過工作管理員視窗看到該程式ID
- ②申請記憶體空間。每個程式擁有獨立的地址空間。
既然程式也可以使多個程式能併發執行,為什麼還需要執行緒?
從使用者使用的角度來看
- 程式的併發解決了哪些問題呢?
- 多應用同時進行,在QQ音樂聽歌的同時 還可以刷QQ空間。
- 應用分身,這允許我們同時登入好多人的QQ號。
- 如果我們QQ程式中只有一個執行緒,會發生什麼呢?
- 單執行緒的程式是完全順序結構,只能在同一時間做一件事情。比如我們在使用QQ進行檔案傳輸的時候,就無法和好友發訊息 閒聊了。
從上下文狀態切換的角度來看
- 程式的單位比較大,建立/銷燬、進行上下文切換比較浪費資源
- 執行緒的單位比較小,建立/銷燬、上下文切換不太浪費資源
- 所以,需要頻繁建立銷燬時,要考慮執行緒 。在需要大量計算、切換頻繁時 使用執行緒可以提高程式的響應速度 。
執行緒的引入優點很多,又有哪些問題呢?
- 開發更加麻煩。
- 執行緒可以共享一個程式的資源,所以共享的資料要保證安全。
- 執行緒的執行順序,也需要保證,比如我們要給QQ好友傳送一張圖片,這篇文章傳輸過程中可能被分成了很多份小的
資料包來傳送,這個時候QQ好友接收資料包的順序不能亂。
程式與執行緒有哪些聯絡呢?
- 一個程式之中可以包含多個執行緒
- 執行緒可以共享一個程式的資源