iOS開發 執行緒與程序的區別於聯絡

2021-07-11 07:27:15 字數 1528 閱讀 5551

**編者對執行緒與程序的認識與理解

通過這樣乙個簡單的例子是不是對程序和執行緒有了初步的認識呢,形象說起來一台計算機可同時執行多個程序,每個程序中可包含多個執行緒,然而在活動監視器或者windows的任務管理器中可以實時觀察到計算機的程序,但是不可看到每個程序的執行緒內容。

執行緒是cpu最小的排程單位,是程式執行的最小單元,乙個程式有且只有乙個主線程,程式啟動時建立(呼叫main來啟動),主線程的生命週期是和應用程式繫結的,程式退出時,主線程也就停止了。

每乙個程序是可以共享乙個記憶體空間的,其中的執行緒都可以使用這些共享記憶體,但是乙個執行緒使用某些共享記憶體時,其他執行緒必須等它結束才能使用這些記憶體。

執行緒池:管理執行緒的容器,提前建立的一些執行緒先放在其中,用到的時候取出,用完放回。

序列:使用一條資料線,將資料一位一位一次傳輸,每一位資料占用固定的時間長度。

並行:多個處理器或者多核處理器同時處理多個不同的任務。

同步:呼叫乙個任務開始執行之後,等到執行結果才會繼續執行下面的任務。多個任務單個單個執行。

非同步:呼叫的多個任務連續執行,不用等待執行結果。

阻塞:呼叫結果返回之前,執行緒被掛起,函式等得到結果後才返回。

非阻塞:函式不會阻擋當前的執行緒,會立刻返回。

互斥鎖:多執行緒程式設計中防止兩條執行緒同時對乙個公共資源進行讀寫的機制。

訊號量:是乙個計數器,它用來記錄對某個資源的訪問狀況。

執行緒狀態:

新建狀態:新建立乙個執行緒物件。

就緒狀態:執行緒物件建立之後,其他執行緒呼叫了該物件的start方法,該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取cpu的使用權。

執行狀態:就緒狀態的執行緒獲取了cpu,執行程式**。

阻塞狀態:因某種原因放棄cpu使用權,暫停執行,知道執行緒進入就緒狀態,才有機會轉到執行狀態。

死亡狀態:執行緒執行完了或者因異常退出了run方法,該執行緒結束生命週期。

下面來談談cpu跟執行緒的一點聯絡。

cpu是一台計算機用來計算的核心部位,所有的計算操作都在此完成,事實上單核cpu只能同時處理乙個程序的計算,但是早先的計算機照樣可以同時處理多個應用,這就涉及到類似於通訊原理的時分復用技術了,在不同的時段處理不同程序的計算任務,讓使用者看起來好像是在同時處理多個應用程式。之後又產生了雙核,四核甚至更多核的cpu來增強資料處理能力,多個核都真正的實現了多執行緒的處理,使工作效率更高。

談一些實用的概念和方法吧

nsoperationqueue是用來建立佇列,可以通過它的方法來建立併發佇列,同時可以給建立出來的操作佇列新增任務。沒設定最大併發數的前提下會開啟多執行緒。設定最大併發數後程式同時執行的執行緒會受限,更多的任務會在他們不同的併發佇列中按序執行。

nsoperation是乙個抽象類,使用它的子類來建立任務,這個任務可以新增到任何佇列中去,可以是主佇列也可以是併發佇列。

兩個子類:nsblockoperation和nsinvocationoperation。通過他們建立出來的任務如果新增到主佇列中就是序列執行,如果新增到併發佇列中,並且沒有設定最大併發數的時候是多執行緒同時執行的。

本文只是編者對程序和執行緒的初步認識,如有誤請指正。

執行緒與程序的區別於聯絡

程序 process 是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。狹義定義 程序是正在執行的程式的例項 例如執行qq 執行緒 英語 thread 是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。一條執行緒...

iOS 開發程序與執行緒

程序 process 是一塊包含了某些資源的記憶體區域。作業系統利用程序把它的工作劃分為一些功能單元。程序中所包含的乙個或多個執行單元稱為執行緒 thread 程序還擁有乙個私有的虛擬位址空間,該空間僅能被它所包含的執行緒訪問。通常在乙個程序中可以包含若干個執行緒,它們可以利用程序所擁有的資源。在引...

執行緒與程序的區別

原文 程序 process 和執行緒 thread 是作業系統的基本概念,但是它們比較抽象,不容易掌握。最近,我讀到一篇材料,發現有乙個很好的模擬,可以把它們解釋地清晰易懂 1 計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2 假定工廠的電力有限,一次只能供給乙個車間使用...