多线程的底层实现MJ

2017-03-08  本文已影响0人  March_Cullen

一个应用程序即一个进程,一个进程中可以开多条线程;多线程编程,也叫并发编程。
Mach是第一个以多线程方式处理任务的系统,因此多线程的底层是基于Mach的线程。开发中很少用Mach级的线程,因为Mach级的线程没有提供多线程的基本特征,线程之间是独立的。

多线程之间的通信
(1)

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

(2)NSMachPort
实例:

// 在异步线程做事情
dispatch_async(dispatch_get_main_queue(), ) {
// 回到主线程刷新UI界面
}

网络图片处理问题中怎么解决一个相同的网络地址重复请求的问题

NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSData*data = [NSData dataWithContentsOfURL:url ];
cell.imageView.image = [UIImage imageWithData:data];
}];
[self.queue addOperation:operation];

GCD的底层实现
(1)iOS和OS X的核心是XNU内核,因此GCD是基于XNU内核实现的;
(2)GCD的API全部在libdispatch库中;
(3)GCD的底层实现主要有Dispatch Queue和Dispatch Source;

dispatch_async(dispatch_queue_t, <#(void)block#>);

GCD&NSOperation
(1)GCD是纯C语言的API,NSOperationQueue是基于GCD的OC版本封装;
(2)GCD只支持FIFO的队列,NSOperationQueue可以很方便的调整执行顺序,和最大并发数;queue.maxConcurrentOperationCount = 1;
(3)GCD的执行速度比NSOperationQueue快;
(4)GCD不支持KVO;
(5)NSOperation可以轻松在Operation间添加依赖,设置执行顺序,而GCD需要写很多的代码才能实现;
(6)NSOperation可以设置对大并发数,以及优先级;
(7)NSOperationQueue支持KVO,可以监测operation是否正在执行(isExecuted),是否结束(isFinished),是否取消(isCanceled);
(8)NSOperation基于GCD, 支持KVO,[operation isFinished]监听operation是否执行完成,监听任务的执行情况
(9)NSOperation速度比GCD慢, 要求时刻监听,使用NSOperation
(10)使用规则:

GCD以及block的使用要注意些什么
(1)循环引用
(2)block的内存管理

block
block里面所有的代码会自动执行,并且在后台执行。把下载操作放在block里面,系统会把下载操作放在子线程中执行,下载完成,回到主线程填充图片数据。

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

block的内存管理

Socket, TCP/IP, UDP, XMPP, HTTP
Http:超文本传输协议,用于网络数据传输的格式

socket可以发送TCP\IP,UDP,HTTP请求

音频压缩
音频序列服务
音频文件 -> 字节压缩
数据压缩框架

上一篇 下一篇

猜你喜欢

热点阅读