非原創 文字來自: 純屬複製
程序和執行緒概念:
乙個程式包含乙個以上的程序,而乙個程序又可以包含乙個以上的執行緒,每乙個程序都有自己獨立的記憶體空間,相應的乙個程序中的所有執行緒都共享該記憶體空間。
程序:是乙個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的資 源分配單元,也是基本的執行單元。獨立的位址空間使得不同的程序共享狀態資訊變得非常困難,為了共享資訊,它們必須顯式的使用(程序通訊機制),程序之間 通訊比較慢,因為程序控制和程序式通訊機制開銷很大。
執行緒:程序作為分配資源的基本單位,而把執行緒作為獨立執行和獨立排程的基本單位,由於執行緒比程序更小,基本上不擁有系統資源,故對它的排程所付 出的開銷就會小得多,能更高效的提高系統內多個程式間併發執行的程度。乙個執行緒就是執行在程序上下文的乙個邏輯流。現代作業系統允許我們編寫乙個程序裡同 時執行多個執行緒的程式。執行緒由核心排程。每個程序開始生命週期時都是單一執行緒,這個執行緒稱為主線程,在某一時刻,主線程建立乙個對等執行緒。從這個時間點開 始,兩個執行緒就併發執行。最後,因為主線程執行乙個慢速系統呼叫,如read或者sleep,控制就會通過上下文切換傳遞到對等執行緒。在控制傳遞歸主線程 前,對等執行緒會執行一段時間。
(一) 傳統的程式執行方式是一種順序執行方式,即本句執行完成之後,才會執行下一句。
(二) 多執行緒下程式塊可以併發執行,大大地節省了程式的執行時間,下面列出建立多執行緒的幾種方式:
[self performselectorinbackground:@selector(dothing) withobject:nil];
(2)直接建立乙個執行緒,selector選擇器則指明將要進行的操作,用這種方法時執行緒直接啟動:
[nsthread detachnewthreadselector:@selector(dothing) totarget:self withobject:nil];
(3)建立乙個執行緒並設定啟動方式
nsthread *thread = [[nsthread alloc] initwithtarget:self selector:@selector(dothing) object:nil];
thread.name = @"qingyun";
[thread start];
(4)建立乙個多執行緒的佇列
nsoperationqueue *queue = [[nsoperationqueue alloc] init];
建立乙個操作物件,這個操作物件定義了多執行緒需要執行作務
nsinvocationoperation *operation = [[nsinvocationoperation alloc] initwithtarget:self selector:@selector(dothing) object:nil];
[queue addoperation:operation]; // 將操作物件放到這個佇列裡,這樣執行緒就可以直接啟動
(5)使用block塊操作物件的方式建立執行緒,新增到佇列中並啟動執行緒
nsoperationqueue *queue = [[nsoperationqueue alloc] init];
nsblockoperation *operation = [nsblockoperation blockoperationwithblock:^;
dispatch_async(dispatch_get_global_queue(dispatch_queue_priority_low, 0), ^;
多執行緒的建立和使用
最近做郵件傳送功能時,客戶端操作程式等待時長,有時候會很長甚至會死執行緒,這個很不利於使用者的體驗,為了解決這個問題,我想到了使用多執行緒,讓系統在後台傳送郵件,使用者操作介面不受影響,從而保證使用者體驗軟體的流暢度。事實上完成後的效果還不錯,系統介面瞬間響應,郵件後台傳送,其快慢程度取決於郵件伺服...
IOS多執行緒程式設計NSThread的使用方法
ios多執行緒程式設計nsthread的使用方法 nsthread是多執行緒的一種,有兩種方法建立子執行緒 1 優點 nsthread 比gcd nsoperation都輕量級 2 缺點 需要自己管理執行緒的生命週期,執行緒同步。執行緒同步對資料的加鎖會有一定的系統開銷 第一種是隱藏建立,有以下幾種...
多執行緒程式設計 執行緒的建立和終止
1 引言 linux 系統下的多執行緒遵循posix 執行緒介面,稱為pthread 編寫linux 下的多執行緒程式,需要使用標頭檔案pthread.h 連線時需要使用庫libpthread.a 順便說一下,linux 下pthread 的實現是通過系統呼叫clone 來實現的。clone 是li...