多線程的底層實現(xiàn)MJ

一個應用程序即一個進程读存,一個進程中可以開多條線程微姊;多線程編程,也叫并發(fā)編程烫映。
Mach是第一個以多線程方式處理任務的系統(tǒng),因此多線程的底層是基于Mach的線程噩峦。開發(fā)中很少用Mach級的線程锭沟,因為Mach級的線程沒有提供多線程的基本特征,線程之間是獨立的识补。

  • C語言的POSIX接口:#include <pthread.h>族淮;
  • OC的NSThread;
  • C語言的GCD接口(原生的)(性能最好凭涂,代碼更簡潔)(充分利用系統(tǒng)的核)(Mac iOS內核是UNIX)祝辣;
  • OC的NSOperation和NSOperationQueue(基于GCD);

多線程之間的通信
(1)

[self performSelector:<#SEL#> onThread:<#NSThread#> withObject:@”123” waitUntilDone:(<BOOL>)];

(2)NSMachPort
實例:

  • 控制器向服務器發(fā)送數(shù)據請求切油,在子線程中實現(xiàn)蝙斜;回到主線程刷新UI界面。
// 在異步線程做事情
dispatch_async(dispatch_get_main_queue(), ) {
// 回到主線程刷新UI界面
}

網絡圖片處理問題中怎么解決一個相同的網絡地址重復請求的問題

  • (1)使用SDWebImage澎胡;
  • (2)開辟子線程下載圖片孕荠,緩存處理;
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSData*data = [NSData dataWithContentsOfURL:url ];
cell.imageView.image = [UIImage imageWithData:data];
}];
[self.queue addOperation:operation];

GCD的底層實現(xiàn)
(1)iOS和OS X的核心是XNU內核攻谁,因此GCD是基于XNU內核實現(xiàn)的稚伍;
(2)GCD的API全部在libdispatch庫中;
(3)GCD的底層實現(xiàn)主要有Dispatch Queue和Dispatch Source戚宦;

  • Dispatch Queue:管理block个曙,管理操作在主線程或者異步線程執(zhí)行;
  • Dispatch Source:處理事件受楼;
dispatch_async(dispatch_queue_t, <#(void)block#>);

GCD&NSOperation
(1)GCD是純C語言的API垦搬,NSOperationQueue是基于GCD的OC版本封裝祠挫;
(2)GCD只支持FIFO的隊列,NSOperationQueue可以很方便的調整執(zhí)行順序悼沿,和最大并發(fā)數(shù)等舔;queue.maxConcurrentOperationCount = 1;
(3)GCD的執(zhí)行速度比NSOperationQueue快;
(4)GCD不支持KVO糟趾;
(5)NSOperation可以輕松在Operation間添加依賴慌植,設置執(zhí)行順序,而GCD需要寫很多的代碼才能實現(xiàn)义郑;
(6)NSOperation可以設置對大并發(fā)數(shù)蝶柿,以及優(yōu)先級;
(7)NSOperationQueue支持KVO非驮,可以監(jiān)測operation是否正在執(zhí)行(isExecuted)交汤,是否結束(isFinished),是否取消(isCanceled)劫笙;
(8)NSOperation基于GCD芙扎, 支持KVO,[operation isFinished]監(jiān)聽operation是否執(zhí)行完成填大,監(jiān)聽任務的執(zhí)行情況
(9)NSOperation速度比GCD慢戒洼, 要求時刻監(jiān)聽,使用NSOperation
(10)使用規(guī)則:

  • 任務之間不太相互依賴:GCD允华;
  • 任務之間有依賴或者要監(jiān)聽任務的執(zhí)行情況:NSOperationQueue圈浇;

GCD以及block的使用要注意些什么
(1)循環(huán)引用
(2)block的內存管理

  • MRC:__block
  • ARC:__weak/__unsafe_unretained

block
block里面所有的代碼會自動執(zhí)行,并且在后臺執(zhí)行靴寂。把下載操作放在block里面磷蜀,系統(tǒng)會把下載操作放在子線程中執(zhí)行,下載完成百炬,回到主線程填充圖片數(shù)據褐隆。

self.images[@”124123.png”] = downloadImage;
// 下載完成,存入緩存

block的內存管理

  • 默認放在棧里面
  • 調用copy方法收壕,是放在堆里面

Socket, TCP/IP, UDP, XMPP, HTTP
Http:超文本傳輸協(xié)議妓灌,用于網絡數(shù)據傳輸?shù)母袷?/p>

  • 短鏈接,一次性的
  • 只有服務器能接收http請求蜜宪,客戶端不能接受http請求
  • 適合做一對一的相應
    Socket:套接字虫埂,是一個用于傳輸網絡數(shù)據的工具,創(chuàng)建鏈接最耗時
  • TCP/IP:傳輸協(xié)議
  • 適合聊天
  • XMPP
  • 長鏈接
  • 傳輸速度慢(相對UDP)圃验,不會丟失數(shù)據包(安全)
  • UDP:傳輸協(xié)議
  • 一般用在游戲里面
  • 局域網游戲
  • 網絡游戲
  • 傳輸速度快掉伏,容易丟數(shù)據包(不安全)
  • 大文件傳輸只能用Socket
  • 文件斷點續(xù)傳,使用socket,其他情況使用AFN
    XMPP:做即時通訊(基于TCP/IP)

socket可以發(fā)送TCP\IP斧散,UDP供常,HTTP請求

  • 大文件傳輸只能用socket,支持斷點續(xù)傳
  • 上傳圖片使用http請求
  • HTTP是一對一請求

音頻壓縮
音頻序列服務
音頻文件 -> 字節(jié)壓縮
數(shù)據壓縮框架

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末鸡捐,一起剝皮案震驚了整個濱河市栈暇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箍镜,老刑警劉巖源祈,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異色迂,居然都是意外死亡香缺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門歇僧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來图张,“玉大人,你說我怎么就攤上這事诈悍』雎郑” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵写隶,是天一觀的道長倔撞。 經常有香客問我,道長慕趴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任鄙陡,我火速辦了婚禮冕房,結果婚禮上,老公的妹妹穿的比我還像新娘趁矾。我一直安慰自己耙册,他們只是感情好,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布毫捣。 她就那樣靜靜地躺著详拙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔓同。 梳的紋絲不亂的頭發(fā)上饶辙,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音斑粱,去河邊找鬼弃揽。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的矿微。 我是一名探鬼主播痕慢,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涌矢!你這毒婦竟也來了掖举?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤娜庇,失蹤者是張志新(化名)和其女友劉穎塔次,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體思灌,經...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡俺叭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了泰偿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熄守。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖耗跛,靈堂內的尸體忽然破棺而出裕照,到底是詐尸還是另有隱情,我是刑警寧澤调塌,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布晋南,位于F島的核電站,受9級特大地震影響羔砾,放射性物質發(fā)生泄漏负间。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一姜凄、第九天 我趴在偏房一處隱蔽的房頂上張望政溃。 院中可真熱鬧,春花似錦态秧、人聲如沸董虱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愤诱。三九已至,卻和暖如春捐友,著一層夾襖步出監(jiān)牢的瞬間淫半,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工楚殿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撮慨,地道東北人竿痰。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像砌溺,于是被迫代替她去往敵國和親影涉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容