多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > ios多線程 -- GCD介紹

ios多線程 -- GCD介紹

來源:程序員人生   發布時間:2016-07-13 08:55:45 閱讀次數:2569次

GCD (純C語言) 全稱 Grand Central Dispatch,可譯為“偉大的中樞調度器”

優點:
(1) GCD是為多核并行運算提出的解決方案
(2) GCD會自動利用更多的CPU內核(比如雙核、4核)
(3) GCD會自動管理線程的生命周期(創建線程、調度任務、燒毀線程)
(4) 程序員只需要告知GCD想要履行甚么任務,不需要編寫任何線程管理代碼

核心概念:
(1) 任務(block):履行甚么任務
(2) 隊列(queue):用來寄存任務

使用步驟:
(1) 定制任務:肯定要履行的操作
(2) 將任務添加到隊列中: GCD 會自動將隊列中的任務取出,放到對應的線程來履行;任務的取出遵照隊列的 FIFO 原則 (先進先出).

GCD履行任務的經常使用函數
(1) 用同步的方式

/** * 參數說明 * @param queue 隊列 * @param void 任務 */ dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)

(2) 用異步的方式

dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)

同步異步區分:
(1) 同步: 只能在當前線程中履行, 不具有開啟線程的能力
(2) 異步: 可以在新線程中履行, 具有開啟線程的能力.

GCD隊列的類型(3種)
并發隊列(全局隊列):可讓對個任務并發(同時)履行, 自動開啟多個線程,同時履行任務;(并發的功能只能在異步履行的時候才有效).

/** * 優先級 * DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高 * DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默許(中) * DISPATCH_QUEUE_PRIORITY_LOW (⑵) // 低 * DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后臺 */ dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

串行隊列:讓任務1個接1個履行,1個任務履行終了,才能履行下1個任務.

dispatch_queue_t queue = dispatch_queue_create("xiaocai", NULL); //dispatch_release(queue); // 非ARC需要釋放手動創建的隊列

串行隊列的特殊情況:主隊列:

dispatch_get_main_queue()

補充:
同步和異步:主要影響能不能開啟新的線程

  • 同步:不具有開啟新線程的能力
  • 異步:具有開啟線程的能力

并發和串行主要影響任務的履行方式

  • 并發: 多個任務并發(同時)履行
  • 串行:1個任務履行終了,下1個任務才開始履行.

組合方式
異步 并發隊列(最經常使用)

/** 異步(dispatch_async) 并發隊列(全局隊列)(最經常使用) 會創建線程,1次開多條, 并行的履行任務 */ - (void)createAsynGload{ //創建并發隊列(全局隊列) dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadA"]; }); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadB"]; }); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadD"]; }); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadE"]; }); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadF"]; }); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadG"]; }); }

異步并發

異步 串行隊列(偶爾用)

/** 異步(dispatch_async) 串行隊列(有時用) 會創建線程,1般開1條, 串行的履行任務 */ - (void)createAsynQueue{ //創建隊列(串行隊列,順次履行) dispatch_queue_t queue = dispatch_queue_create("xiaocai", NULL); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadA"]; }); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadB"]; }); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadD"]; }); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadE"]; }); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadF"]; }); dispatch_async(queue, ^{ [self downLoad:@"http://ThreadG"]; }); }

異步串行

異步 主隊列(常常用)

/** 異步(dispatch_async) 主隊列(很經常使用) 不會創建線程,在主線程中履行任務 */ - (void)createAsynMainQueue{ dispatch_queue_t mianQueue = dispatch_get_main_queue(); dispatch_async(mianQueue, ^{ [self downLoad:@"http://ThreadA"]; }); dispatch_async(mianQueue, ^{ [self downLoad:@"http://ThreadB"]; }); dispatch_async(mianQueue, ^{ [self downLoad:@"http://ThreadD"]; }); dispatch_async(mianQueue, ^{ [self downLoad:@"http://ThreadE"]; }); dispatch_async(mianQueue, ^{ [self downLoad:@"http://ThreadF"]; }); dispatch_async(mianQueue, ^{ [self downLoad:@"http://ThreadG"]; }); }

異步主隊列

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 五月婷婷在线视频 | 国产精品嫩草影院视频 | 男人边吃奶边摸下面好爽视频 | 黄色亚洲视频 | 日韩欧美一二三区 | 国产一级第一级毛片 | 日本亚洲国产精品久久 | 成人一区专区在线观看 | 午夜美女写真福利写视频 | 视频精品一区 | 日韩一区二区视频在线观看 | 欧美一区二区精品系列在线观看 | 成人精品免费视频 | 国产精品11页 | 一级a毛片免费观看 | 欧美日本免费一区二区三区 | 久久久日韩精品国产成人 | 最近更新中文字幕在线 | 久久久国产精品免费 | 欧美日韩久久毛片 | 日韩欧美在线观看视频一区二区 | 欧美成人性色生活18黑人 | 亚洲区小说区激情区图片区 | 亚洲国产成人久久综合一区 | 久久久国产精品免费 | 亚洲精品国产一区二区三区在 | 欧美黑人xxxx猛牲大交 | 国产国语一级a毛片高清视频 | 欧美日韩xxx | 91一区二区在线观看精品 | 欧美巨大另类极品video | 亚洲欧美国产另类视频 | 免费观看黄色的网站 | 久久国产精品免费看 | 日本xxx护士| 精品理论片一区二区三区 | 999精品视频在线观看 | 99国产在线观看 | 一级欧美日韩 | 夜夜精品视频一区二区 | 亚洲福利 |