国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS 多線程問(wèn)題

2019-11-07 23:56:19
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

哈,終于有時(shí)間來(lái)整理一下這個(gè)多線程問(wèn)題了,好了費(fèi)話不多說(shuō),進(jìn)入正題。

我的拙見(jiàn)進(jìn)程線程線程串行并發(fā)并行異步iOS的多線程應(yīng)用有四種代碼寫(xiě)的方式Pthread 這個(gè)方式我就沒(méi)用過(guò)好吧NSthread 這才是蘋(píng)果封裝的這個(gè)我也很少用GCD這個(gè)好用我自己常用- 創(chuàng)建隊(duì)列- 創(chuàng)建任務(wù)- 隊(duì)列組

我的拙見(jiàn)

進(jìn)程

進(jìn)程(PRogress)就是一個(gè)已運(yùn)行程序的實(shí)體,也是多個(gè)線程的一個(gè)容器。程序本身只是指令得集合,而進(jìn)程才是程序(那些指令)的真正運(yùn)行。每個(gè)進(jìn)程都是獨(dú)立的,都會(huì)在其專有的且受保護(hù)得內(nèi)存空間中。

現(xiàn)今分時(shí)系統(tǒng)得基本運(yùn)行單位。

線程

線程(thread)它被包含在進(jìn)程之中,一條線程就是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù) 線程是進(jìn)程得基本執(zhí)行單元,一個(gè)進(jìn)程得所有任務(wù)都在線程中執(zhí)行。

線程串行

1個(gè)線程中任務(wù)的執(zhí)行是串行的 如果在一個(gè)線程中執(zhí)行多個(gè)任務(wù),那么只能一個(gè)一個(gè)地順序執(zhí)行這些任務(wù) 同一時(shí)間一個(gè)線程只能執(zhí)行一個(gè)任務(wù)

并發(fā)

一個(gè)cpu強(qiáng)行要處理多個(gè)線程,在宏觀上造成一種假象,假裝一起執(zhí)行,其實(shí)是交替執(zhí)行吧

并行

多個(gè)核一起走,真正的一起來(lái)處理

異步

異步是最終目的,多線程只是實(shí)現(xiàn)異步的一種手段。等待某事件的過(guò)程中繼續(xù)做自己的事,不需要等待這一事件完成后再工作。和同步相對(duì)。

好吧以上就是我理解的,還有些不足,還請(qǐng)吊大的指出來(lái)

iOS的多線程應(yīng)用有四種代碼寫(xiě)的方式。

PthreadNSThreadGCDNSOperation & NSOperationQueue

Pthread 這個(gè)方式,我就沒(méi)用過(guò)好吧。

就是一套多系統(tǒng)通用的多線程API,移植性很強(qiáng)。在iOS可以用但是是基于c語(yǔ)言的,這酸爽。

NSthread 這才是蘋(píng)果封裝的(這個(gè)我也很少用)

可以完全面向?qū)ο?,所有我們直接操控線程對(duì)象。

GCD這個(gè)好用(我自己常用)

這個(gè)就是直觀,而且好用,代碼簡(jiǎn)潔。是蘋(píng)果為多核的并行運(yùn)算提出的解決方案,所以會(huì)自動(dòng)合理地利用更多的CPU內(nèi)核,它會(huì)自動(dòng)管理線程的生命周期,我們只需要告訴干什么就行了,也是用c語(yǔ)言,結(jié)合了block(swift李叫做閉包),大家都喜歡用這個(gè)呢 具體介紹的話看這個(gè) http://www.jianshu.com/p/d56064507fb8

- 創(chuàng)建隊(duì)列

主隊(duì)列 是特殊的串行隊(duì)列,常用來(lái)刷新UI,UI刷新變化的工作經(jīng)常在主隊(duì)列里進(jìn)行,像網(wǎng)絡(luò)請(qǐng)求里面,block返回的進(jìn)度條,在界面操作的時(shí)候就必須在主隊(duì)列里進(jìn)行。 let queue = ispatch_get_main_queue() //swift自己創(chuàng)建的隊(duì)列 自己可以創(chuàng)建并行和串行隊(duì)列,會(huì)有兩個(gè)參數(shù),第一個(gè)是標(biāo)識(shí)符,用于DEBUG的時(shí)候標(biāo)志唯一的隊(duì)列,可為空。第二個(gè)比較重要,╭(╯^╰)╮第二個(gè)來(lái)表示創(chuàng)建的隊(duì)列是串行還是并行的。傳入DISPATHCH_QUEUE_SERIAL 或者 NULL表示創(chuàng)建的是串行的隊(duì)列。傳入DISPATCH_QUEUE_CONCURRENT來(lái)表示創(chuàng)建并行隊(duì)列。//swift 串行l(wèi)et queue = dispatch_queue_create("標(biāo)識(shí)",nil);let queue = dispatch_queue_create("標(biāo)識(shí)",DISPATHCH_QUEUE_SERIAL );//swift 并行l(wèi)et queue = dispatch_queue_create("標(biāo)識(shí)",DISPATCH_QUEUE_CONCURRENT);全局并行隊(duì)列 只要是并行的任務(wù)都會(huì)加入到這個(gè)隊(duì)列。系統(tǒng)提供的并發(fā)隊(duì)列l(wèi)et queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)

好的創(chuàng)建完隊(duì)列之后,就創(chuàng)建任務(wù)吧

- 創(chuàng)建任務(wù)

同步任務(wù) 會(huì)阻塞當(dāng)前的線程(SYNC)dispatch_sync(<#queue#>,{()->Void in //code here 3.0之前代碼 println(NSThread.currentThread())})異步任務(wù) 不會(huì)阻塞當(dāng)前線程(ASYNC)dispatch_async(<#queue#>,{()>Void in //code here 3.0之前代碼 println(NSThread.currentThread())})

現(xiàn)在的3.0將代碼的語(yǔ)法風(fēng)格都進(jìn)行了較大的改革,和之前的不太一樣,我先把理論弄下來(lái),然后再實(shí)現(xiàn)吧 詳細(xì)戳這 http://www.jianshu.com/p/8442576377a8 這里詳細(xì)的解釋了異步,同步,串行,并行都是在Swift 3.0下實(shí)現(xiàn)的

- 隊(duì)列組

隊(duì)列組使我們能夠然所有的任務(wù)都執(zhí)行完之后,再來(lái)執(zhí)行語(yǔ)句。

let group = dispatch_group_create()let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)dispatch_group_async(group,queue){()-> Void in for _ in 0..<3{ println(NSThread.currentThread()) }}dispatch_group_async(group,disptach_get_main_queue()){()-> Void in for _ in 0..<8{ println(NSThread.currentThread()) }}dispatch_group_async(group,queue){()-> Void in for _ in 0..<5{ println(NSThread.currentThread()) }}//總得 (3.0之前的代碼,預(yù)計(jì)不能運(yùn)行了吧)dispatch_group_notify(group,dispatch_get_main_queue()){()->Void in println("完成/(NSThread.currentThread())")}

主要是這個(gè)大神寫(xiě)的http://www.jianshu.com/p/0b0d9b1f1f19


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 深州市| 安化县| 郓城县| 云南省| 博爱县| 溧水县| 谢通门县| 旬阳县| 柳州市| 八宿县| 阿巴嘎旗| 彭州市| 平顶山市| 蒲城县| 白玉县| 万宁市| 福州市| 洪湖市| 天柱县| 皮山县| 运城市| 芜湖市| 德保县| 麦盖提县| 洞头县| 祁阳县| 阿坝县| 四子王旗| 交城县| 民丰县| 壤塘县| 凤城市| 延吉市| 滨海县| 青浦区| 叶城县| 南宁市| 小金县| 临汾市| 余江县| 恩施市|