NSThread、NSOperation、GCD、NSOperationQueue
来源:互联网 发布:淘宝店铺行业怎么改 编辑:程序博客网 时间:2024/05/17 06:09
NSThread轻量级(每一个NSOperation对象对应一个线程)
缺点:需要自己管理线程的生命周期,线程同步,同时线程同步对数据的加锁有一定的系统开销。
NSOperation:面向对象的线程技术,不需要关心线程管理,数据同步的问题,可以吧精力放在数据的操作上!
GCD:是局域C语言框架的
1:使用NSThread
便利构造器的方式创建:[NSThread detachNewThreadSelector:@selector(oneThread:) toTarget:self withObject:nil]
[self performSelectorOnMainThread:@selector(oneThread) withObject:nil waitUnitilDone:YES]
[mThread cancel] //标记当前线程的状态为cancel,但是线程并没有被杀死,若线程中正在执行循环操作,则必须判断当前线程的状态
2:NSOperationQueue默认是串行队列(并发执行的)
NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithblock:^{
NSLog(@"1");
}]
NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithblock:^{
NSLog(@"2");
}]
NSOperationQueue *queue = [[NSOperationQueue alloc] init];[queue addOperation:operation1];
[queue addOperation:operation2];
默认先执行线程一,然后再执行线程二
但是现实状态下有这样的需求:当多个线程执行完成时才执行其他的操作,则这里需要设置线程之间的依赖关系,添加依赖关系[operation1 addDependency:operation2],之后线程一得等到线程二执行完毕时才会被执行
2.1队列中的线程执行顺序主要取决于两点
1:首先看NSOperation是否准备就绪,主要看operation中是否含有依赖关系
2: 可通过设置operation的优先级setQueuePriority
2.2设置线程的最大并发数
[queue setMaxConcurrentOperationCount:1]
可通过它来改变线程的执行顺序,当设置并发数为一时,线程的优先级将无效,单依赖关系依然有效
2.3暂停和继续operation,queue
[operation1 waitUnitlFinish]//这样会破坏程序的并发性
[queue setSuspended:NO]
3:GCD它是基于C语言实现的(完全由系统管理线程)
核心理念:将长期运行的任务拆分成多个工作单元,并将这写单元添加到dispatch queue中,严格遵循FIFO原则,分为串行(serial)和并行(concurrent)
3.1顺序执行
dispatch_queue_t queue = dispatch_queue_create("serial",NULL);
dispatch_queue_t queue1 = dispatch_get_main_queue()
3.2并发执行
dispatch_queue_t queue = dispatch_get_global_queue(0,0);
3.3 假设有这样的一种情况,三个任务,任务一,二,三,任务三得等到任务一,二执行完毕才执行,则可利用group的形式
- NSThread、NSOperation、GCD、NSOperationQueue
- NSThread、NSOperation/NSOperationQueue、GCD多线程
- 多线程之GCD,NSOperation和NSOperationQueue,NSThread
- 关于iOS多线程Pthreads, NSThread, GCD, NSOperation & NSOperationQueue
- 多线程编程-NSObject、NSThread、NSOperation和NSOperationQueue、GCD
- NSOperationQueue GCD NSThread总结
- 多线程 GCD NSOperationQueue NSThread
- NSThread & NSOperation & GCD
- GCD,NSThread,NSOperation
- NSThread,NSOperation,GCD
- NSthread&NSOperation&GCD
- 多线程GCD, NSThread, NSOperation
- NSThread、Cocoa NSOperation、GCD
- 多线程 NSThread,NSOperation,GCD
- 多线程NSThread、NSOperation、GCD
- 多线程NSThread,GCD,NSOperation?
- iOS三种多线程技术NSThread,NSOperation/NSOperationQueue,GCD-Grand Central Dispatch
- iOS多线程,NSThread ,NSOperationQueue ,GCD
- maven打jar例子
- Android WebView打开https地址错误的问题
- Unreal4 简单创建一个c++项目,并给对象添加材质
- 黑马程序员——C语言基础08—结构体/枚举
- js/jQuery效果集锦
- NSThread、NSOperation、GCD、NSOperationQueue
- setEmptyView
- 【Unity实用小方法】随机生成不重复的数字
- TCP/IP
- JNI:JAVA调用C库方法
- WebView调用本地的js,css,html
- 基于mini2440 的 bootloader 设计 ---- 5、内存初始化
- 素数
- IIS 6文件解析漏洞