多线程问题

来源:互联网 发布:windows10怎么下载软件 编辑:程序博客网 时间:2024/05/22 09:14

1.多线程的底层实现?
1>Mach 是一个以多线程方式处理任务的系统,因此多线程的底层实现机制是基于Mach的线程。
2>开发中很少用Mach级的线程,因为Mach级的线程没有提供多线程的基本特征,线程之间是独立的
3>开发中实现多线程的方案
(1)C语言的POSIX接口:
#include<pthread.h>
(2)OC的NSThread
(3)C语言的GCD接口(性能最好,代码最精简);
(4)OC的NSOperation和NSOperationQueue(基于GCD)

2.线程之间怎么通信?
1>GCD
2>performSelector: onThread: withObject: waitUntilDone: performSelectorOnMainThread: withObject: waitUntilDone:
3>NSMachPort(可选)

3.用NSoperation 和NSOperation 处理ABC三个线程,要求执行完AB后才能执行C,怎么做?
//创建队列
NSOperationQueue * queue = [[NSOperationQueue alloc]init];
//创建3个操作
NSOperation * a = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@”operation1—”);
}];
NSOperation * b = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@”operation1—”);
}];
NSOperation * c = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@”operation1—”);
}];

//添加依赖
[c addDependency:a];
[c addDependency:b];

//执行操作
[queue addOperation:a];
[queue addOperation:b];
[queue addOperation:c];

4.列举Cocoa中常见几种对多线程的实现,并谈谈多线程安全的几种解决办法以及多线程安全怎么控制?
1》只在主线程刷新访问UI
2》如果要防止资源抢夺,用@synchronized 进行加锁保护
3》如果异步操作要保证线程安全等问题,尽量使用GCD(有些函数默认就是安全的)

5.GCD内部怎么实现的
1》iOS和 OS X的核心是XNU内核,GCD也是基于XNU内核实现的
2》 GCD的API 全部在libdispatch库中
3》 GCD的底层实现主要有 Dispatch Queue 和Dispatch Source。
Dispatch Queue :管理block(操作)
Dispatch Source:处理事件(比如线程问题的通信)

6.NSOperation 与GCD的区别和类似的地方(实现机制和适用范围)
1》GCD是纯C语言API, NSOperationQueue是基于GCD的OC版本封装。
2》GCD只支持FIFO的队列,NSOperationQueue可以很方便地调整执行顺序,设置最大并发数量。
3》NSOperationQueue可以轻松在Operation间设置依赖关系,而GCD需要写很多的代码才能实现。
4》NSOperationQueue支持KVO,可以检测Operation是否正在执行(isExcuted),是否结束(isFinished),是否取消(isCanceled)
5》GCD的执行速度比NSOperationQueue快!

0 0
原创粉丝点击