亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

【學習筆記】多線程

2019-11-14 19:52:32
字體:
來源:轉載
供稿:網友

網絡上關于多線程的原理和用法的解釋,隨便一搜一大堆,但是那個寬泛過于學術性的解釋,我看著太費力了。

我就用自己比較容易理解的白話來記錄一下我學到的知識吧。

 

一、進程

  在移動端,一個app就是一個進程,在內存中占用一定的空間。

  在計算機里,一個程序就是一個進程,同樣也占用內存空間。

  iOS同一時間點只有一個進程在使用CPU,只是系統把這個時間片分割地非常短,造成一種多個進程同時在執行的假象。

二、線程

  一個進程的執行,必然從一個主線程開始。

  整個應用可以由單個主線程運行,但是涉及到一些耗時的任務,例如打開淘寶app,必然要加載一大堆的圖片。

  這時,如果只有單線程執行,程序必須等著圖片都加載完畢才能繼續往下執行,期間用戶的交互就不起作用,這樣用戶體驗很不好。

  所以,這時就衍生出多線程的概念,可以開子線程給那些耗時的任務,在旁邊默默地執行,而不影響應用的大局。

  主線程,一般用來處理主體的展示(例如控制器的切換)和交互事件。

  子線程,一般用來處理耗時的任務。

  當然,并不是線程越多越好,多線程的使用也是要慎重考慮。

三、同步和異步

  我之前一直對同步和異步這個概念理解不清,常?;煜?。同步是線程安全呢,還是異步線程安全呢?

  今天終于記清楚了這個概念,只要記住一句話——同步,就是同類;異步,就是異類。

  已經是同類,那肯定是處于同一個線程;異類,那就說明不是一個線程。

 

四、并行和串行

  并行:并發執行

  串行:按順序執行,一個接一個

 

五、三種常用創建多線程方式

  1、NSThread:程序員手動管理線程,而多線程的情況下,線程什么時候執行完畢是未知的,如果管理不好,會造成內存泄露,所以這種方法不提倡。

 

  2 、NSOperation/NSOperationQueue。這兩個類必須是搭配使用的,將操作放入操作隊列中,依次執行。

  1>使用步驟:

  * 創建NSOperation

  * 添加NSOperation到NSOperationQueue

  2>優點:

  * 更加面向對象

  * 可以控制最大并發數 maxConcurrentOperationCount,使用這個屬性可以保證同一時間內最大的并發數

  * 添加任務(Operation)之間的依賴 addDependency,使用這個屬性可以控制一個Operation必須在其依賴的Operation執行完畢后才調用

 

//1.首先聲明一個全局變量NSOperationQueue *_queue;//2.定義變量_queue = [[NSOperationQueue alloc] init];// 控制最大并發數:2_queue.maxConcurrentOperationCount = 2;//3.具體某個方法開啟多線程NSOperation *op = [NSBlockOperation blockOperationWithBlock:^{    NSLog(@"下載圖片-%@", [NSThread currentThread]);}];    NSOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{    NSLog(@"濾鏡處理-%@", [NSThread currentThread]);}];    // op1依賴于op(op執行完,才能執行op1)[op1 addDependency:op];//操作加入隊列[_queue addOperation:op];[_queue addOperation:op1];

  

  3、GCD(官方推薦使用,純C語言)

  調用同步(異步)執行的方法傳入要并行(串行)執行的隊列參數,執行方法內的block代碼。

  說白了就是同一時間有一個還是多個線程執行,就看調用的方法和傳入的隊列類型。

  1> 隊列類型

   * 全局隊列  

    * 所有添加到全局隊列中的任務都是并發執行(同時執行,可能會開啟多個線程)  

    * dispatch_get_global_queue  

  * 串行隊列  

    * 所有添加到串行隊列中的任務都是按順序執行(開一條線程)   

    * dispatch_queue_create("myqueue", 0);  

  * 主隊列  

    * 所有添加到主隊列中的任務都是在主線程中執行的(跟方法名沒有關系)    

    * dispatch_get_main_queue  

  2> 同步還是異步,取決于方法名(不影響主隊列,影響全局隊列、串行隊列) 

    * 同步:dispatch_sync,在當前線程執行任務,不會開啟新的線程 

    * 異步:dispatch_async,在其他線程執行任務,會開啟新的線程

  3>代碼demo演示:

  從組合學上說,總是共有四種情況:串行-同步、串行-異步、并行-同步、并行-異步。

 

  串行-同步:顯然一直只有一個線程在執行(這個就是真正意義上單線程)

  串行-異步:可能會產生多個線程,但是同一時間只有一個線程在執行(異步雖然會產生多個不同線程,但是同一時間只有一個線程在執行)

  并行-同步:同一時間點有多個相同的線程在執行

  并行-異步:同一時間有多個不同的線程在執行(這是真正意義上的多線程)

 

  下面就只舉兩個例子,剩下的2種情況舉一反三就是了

//串行隊列,執行同步方法。說明只有一個線程在執行dispatch_queue_t queue = dispatch_queue_create("myqueue", 0);dispatch_sync(queue, ^{ // 耗時操作    NSLog(@"dispatch_async-%@", [NSThread currentThread]);});

 

//并行隊列,異步執行。說明同一時間多個線程一起執行dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_sync(queue, ^{ // 耗時操作    NSLog(@"dispatch_async-%@", [NSThread currentThread]);});

  

  而主隊列的使用,常常用來執行完子線程后,要講數據返回主線程來進行處理。

  比如開啟子線程下載某個資源,下載完畢需要回調到主線程來展示。

  可以在子線程完成的時候調用以下的方法返回主線程,同時能夠將子線程得到的參數傳給處理的selector方法里執行。

  [xxx performSelectorOnMainThread:@selector(xxx:) withObject:xxx waitUntilDone:YES]

  4、開啟后臺線程

 [self performSelectorInBackground:@selector(test) withObject:nil]

  

六、總結

  多線程是很重要的點,這些只是我目前掌握的理解,可能有很多不足和理解偏差,以后慢慢改進,繼續補充。 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久9999| 狠狠久久亚洲欧美专区| 78m国产成人精品视频| 亚洲精品成人久久电影| 欧美中文字幕第一页| 91美女片黄在线观看游戏| 81精品国产乱码久久久久久| 欧美午夜精品在线| 日韩在线观看免费| 狠狠综合久久av一区二区小说| 国产精品日韩欧美大师| 亚洲一区二区三区四区在线播放| 日韩精品在线视频| 亚洲最新av在线| 欧美日韩国产一区二区| 97精品免费视频| 国产一区二区在线免费视频| 97免费视频在线| 福利二区91精品bt7086| 久久国产精品久久久久久| 91精品国产综合久久男男| 国产一区二区三区18| 国产婷婷色综合av蜜臀av| 国产激情久久久| 色中色综合影院手机版在线观看| 久久精品色欧美aⅴ一区二区| 91色视频在线观看| 欧美性xxxx极品hd欧美风情| 国产精品午夜国产小视频| 国产精品一区二区久久精品| 欧美性生活大片免费观看网址| 日韩美女主播视频| 亚洲国产精品免费| 在线视频日本亚洲性| 国产精品激情av电影在线观看| 欧美性受xxx| 亚洲第一福利网| 中文字幕在线观看亚洲| 国产日产久久高清欧美一区| 日韩国产精品视频| 日韩网站免费观看| 国产精品久久久久久亚洲调教| 欧美成人网在线| 国产精品视频永久免费播放| 欧美精品18videosex性欧美| 中文字幕精品一区久久久久| 91久久久久久国产精品| 91精品国产自产91精品| 尤物九九久久国产精品的分类| 亚洲自拍av在线| 日韩电影中文字幕一区| 亚洲国产精品久久精品怡红院| 国产精品流白浆视频| 狠狠操狠狠色综合网| 热99精品只有里视频精品| 川上优av一区二区线观看| 国产精品成人国产乱一区| 成人福利在线视频| 九九热99久久久国产盗摄| 欧美激情欧美狂野欧美精品| 色香阁99久久精品久久久| 日韩精品中文字幕久久臀| 国产精品美女久久| 欧美视频专区一二在线观看| 97视频免费在线看| 黑人精品xxx一区一二区| 亚洲成人aaa| 日韩av免费在线| 午夜精品一区二区三区av| 国产日韩欧美在线播放| 亚洲第一精品福利| 清纯唯美日韩制服另类| 日韩电影大片中文字幕| 国产精品99免视看9| 亚洲精品一区二区三区婷婷月| 国产日韩欧美在线观看| 欧日韩不卡在线视频| 欧美激情亚洲激情| 亚洲精品自拍第一页| 久久久久女教师免费一区| 大桥未久av一区二区三区| 亚洲国产精品热久久| 97超级碰在线看视频免费在线看| 国产日韩欧美中文| 国产精品国产福利国产秒拍| 91天堂在线视频| 国产精品自拍偷拍视频| 一道本无吗dⅴd在线播放一区| 亚洲缚视频在线观看| 中文字幕日韩精品有码视频| 九色精品免费永久在线| 91成人福利在线| 亚洲男人av在线| 国产脚交av在线一区二区| 91精品综合久久久久久五月天| 91黄色8090| 亚洲天堂2020| 国产一区二区三区三区在线观看| 久久久久久av| 成人444kkkk在线观看| 国产精品6699| 91精品啪在线观看麻豆免费| 欧美影院在线播放| 日韩小视频在线观看| 国产亚洲精品久久| 日韩中文第一页| 日韩视频在线观看免费| 午夜精品久久久久久久久久久久久| 伊人精品在线观看| 中文字幕av日韩| 精品久久久久久国产91| 美女久久久久久久| 亚洲石原莉奈一区二区在线观看| 国产一区二区成人| 国产精品免费一区二区三区都可以| 亚洲天堂久久av| 久久av资源网站| 欧美日韩国产成人| 欧美黑人国产人伦爽爽爽| 久久国产精品电影| 国产美女扒开尿口久久久| 国产成人综合亚洲| 欧美一级片一区| 国产男女猛烈无遮挡91| 欧洲午夜精品久久久| 国产精品入口日韩视频大尺度| 亚洲自拍偷拍一区| 国产色综合天天综合网| 日韩中文综合网| 国产午夜精品一区理论片飘花| 久久99久久亚洲国产| 欧美日韩一区二区三区在线免费观看| 亚洲人av在线影院| 2020国产精品视频| 国产成人精品免高潮费视频| 日韩视频中文字幕| 欧美激情一区二区三区高清视频| 亚洲精品在线视频| 欧美中文字幕视频在线观看| 亚洲国产高清高潮精品美女| 91精品国产99久久久久久| 欧美巨大黑人极品精男| 成人免费福利在线| 精品国产乱码久久久久久婷婷| 免费av一区二区| 日韩亚洲成人av在线| 欧美日韩在线影院| 黄网动漫久久久| 亚洲乱码一区二区| 日韩国产高清视频在线| 少妇久久久久久| 国产精品高清免费在线观看| 国产精品丝袜视频| 亚洲一区二区三| 欧美日韩免费在线观看| 国产精品久久久久久久久久久久| 成人深夜直播免费观看| 亚洲成色www8888| 亚洲精品狠狠操| 久久av在线看| 欧美乱大交xxxxx另类电影| 琪琪第一精品导航| 两个人的视频www国产精品| 有码中文亚洲精品|