1.GCD(Grand Centrol Dispath)
并行:宏观和微观都是两个人再拿着两把铁锹在挖坑,1小时挖两个大坑
并发:宏观上是感觉他们都在挖坑,微观是他们是在使用1把铁锹挖坑,1小时后他们挖了两个小坑。
总结:就单个cpu来讲,大部份进程是并发进行的,就是1把铁锹,你1下我1下,只是间隔时间较短,用户感觉不到而已。
利用:
GCD包括:
(1)实际使用中( 而系统默许就有1个串行队列main_queue和并行队列global_queue:
//dispatch_get_global_queue(0, 0)第1个0是优先级,第2个保存字段
dispatch_async(dispatch_get_global_queue(0, 0), ^{
//在这里可以是数据要求
NSString* result = [self requestData:parameter];
//在这里返回主线程刷新数据
dispatch_async(dispatch_get_main_queue(), ^{
[mainTableView reloadData];
});
});
举例说明:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"];
NSError * error;
NSString * data = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (data != nil) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"call back, the data is: %@", data);
});
} else {
NSLog(@"error when download:%@", error);
}
});
(2)也能够自己创建(我是不怎样用)
串行队列,顾名思义,1串嘛,那就得并发履行喽
//自己创建serial queue
dispatch_queue_t queue = dispatch_queue_create("com.class15.queue", DISPATCH_QUEUE_SERIAL);
//异步履行线程
dispatch_async(queue, ^{
NSLog(@"任务1:%@ %d", [NSThread currentThread],[NSThread currentThread].isMainThread);
});
并行队列通过dispatch_get_global_queue获得,由系统创建3个不同优先级的dispatch queue
//创建自己的队列
dispatch_queue_t queue = dispatch_queue_create("com.class15.comcrrentQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
NSLog(@"任务1:%@ %d", [NSThread currentThread],[NSThread currentThread].isMainThread);
});