多线程问题
来源:互联网 发布: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快!
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题...
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- Please ensure that adb is correctly located at……问题解决方案
- JavaScript 数据结构(5):单链表 LinkList
- Race
- Android 输入系统之InputDispatcher2ViewRootImpl篇----终
- 视频马赛克的实时检测
- 多线程问题
- Context Switches上下文切换性能详解
- CUDA 的 Threading:Block 和 Grid 的設定與 Warp
- iOS对文件的操作(沙盒)
- org.hibernate.hql.internal.ast.ErrorCounter reportError
- 黑马程序员——C基础——关键字、常量、变量、运算符
- lintCode刷题--最长上升连续子序列
- Error:org.gradle.api.internal.changedetection.state.DefaultF
- JAVA 正则表达式 (超详细)