多线程:并发队列

来源:互联网 发布:java软件工程师就业 编辑:程序博客网 时间:2024/05/29 12:58
////  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
0 0