您的位置:首页 > 其它

多线程:并发队列

2016-03-25 23:26 323 查看
//
//  ViewController.m
//  08-并发队列
//
//  Created by gzxzmac on 16/1/29.
//  Copyright © 2016年 gzxzmac. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self gcdDemo1];
}
/*
并发队列
如果是异步的,会开启多个线程
如果是同步的,不会开启线程,会在当前线程执行任务
*/
/*
GCD 开不开线程跟谁有关系
同步,不会开线程,会在当前线程执行任务
异步,会开线程

GCD开多少线线程跟谁有关系?
跟队列有关系。
并发队列,会开多个线程,线程数由系统来决定
串行队列,只会开启一个线程

由于GCD不能设置开启的线程数,现在有一部份公司已经开始转向使用 NSOperation

一般情况下,手机开多少线程合适?
是wifi 还是 手机网络

-- 网络下载的前提
- 如果是wifi 的可以开到5-6条
- 手机网络 2-3 条就可以了

-- 处理本地大数据
- 手机型号/硬件设备有关系

- 手机接上电源 + 连上 wifi = 自动下载系统 => 3-4G 存在手机上
*/
- (void)gcdDemo3 {
dispatch_queue_t queue = dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i < 200; ++i) {
dispatch_sync(queue, ^{
[NSThread sleepForTimeInterval:1];
NSLog(@"%@ %d",[NSThread currentThread],i);
});
}
}

// 并发队列与同步 : 在当前线程执行任务
- (void)gcdDemo2 {
dispatch_queue_t queue = dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCURRENT);
dispatch_sync(queue, ^{
NSLog(@"%@",[NSThread currentThread]);
});
}

// 并发队列会开启多个线程,而且任务不按顺序执行
- (void)gcdDemo1 {
// 创建并发队列
dispatch_queue_t queue = dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i < 200; ++i) {
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:1];
NSLog(@"%@ - %d",[NSThread currentThread],i);
});
}
}

- (void)gcdDemo {
// 创建并发队列
dispatch_queue_t queue = dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
NSLog(@"%@",[NSThread currentThread]);
});
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: