多线程

作者: 健健锅 | 来源:发表于2019-01-11 16:10 被阅读10次

/*
多线程问题 :1.死锁,2,抢占资源线程安全3,消耗大量内存
GCD 把任务添加到 DispathQueue
分为:serial DispathQueue 串行队列 等待当前处理结束
Concurrent DispathQueue 并发 不等待

 可以生成多个 serial DispathQueue 共同添加任务  这样会生成多个线程 消耗资源
 获取queue方法1.
 DispathQueue 手动管理内存 生命周期 dispath_quate_t myquen = disnpatch_queue_create("name",宏)
 dispatch_release 释放   不能设置优先级 都是默认级别
 
 方法2.系统生成 Main dispatch queue(串行,添加到主线后面)  和 global dispatch queue(并行)
 
 global dispatch queue 有四个优先级 高,默认 低,后台
 
 dispatch_queue_t mianqueue = dispatch_get_main_queue()
 
 dispatch_queue_t globalqueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
 这两个 进行dispatch_retain 和 dispatch_release 没有影响  使用起来更加简单
 
 二,
 dispatch_set_target_queue
 更改队列优先级
 修改执行层级:  x让异步线程 顺序执行
 dispatch_queue_t targetSerialQueue = dispatch_queue_create("com.gcd.setTargetQueue2.targetSerialQueue", NULL);
 
 //设置执行阶层
 dispatch_set_target_queue(serialQueue1, targetSerialQueue);
 dispatch_set_target_queue(serialQueue2, targetSerialQueue);
 dispatch_set_target_queue(serialQueue3, targetSerialQueue);
 dispatch_set_target_queue(serialQueue4, targetSerialQueue);
 dispatch_set_target_queue(serialQueue5, targetSerialQueue);
 dispatch_async(serialQueue1, ^{
 NSLog(@"1");
 });
 dispatch_async(serialQueue2, ^{
 NSLog(@"2");
 });
 dispatch_async(serialQueue3, ^{
 NSLog(@"3");
 });
 dispatch_async(serialQueue4, ^{
 NSLog(@"4");
 });
 dispatch_async(serialQueue5, ^{
 NSLog(@"5");
 });
 
 三 dispatch_after  是在相应队列相应时间以后添加任务
 
 四, dispatch group
 self.group = dispatch_group_create();
 dispatch_group_enter(self.group);
 dispatch_group_async(self.group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 //请求1
 [self reuqsetDataPlannerService];////dispatch_group_leveal(self.group);
 });
 dispatch_group_enter(self.group);
 dispatch_group_async(self.group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 //请求2
 [self requestCourseData];//dispatch_group_leveal(self.group);
 
 });
 
 dispatch_group_notify(self.group, dispatch_get_main_queue(), ^{
 
 })
 
 dispatch_async(dispatch_get_global_queue(0, 0), ^{
 
 dispatch_group_wait(disgroup, dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC));
 NSLog(@"dispatch_group_wait 结束");
 });
 
 dispatch_group_wait  设置时间限制 会阻塞线程不能放在主线程
 dispatch_barrier_asyne   dispatch_barrier_syne  插入后面任务时机不同
 
 dispatch_apply  快速迭代
 
 
 五,信号量 dispatch_semaphore
 
 dispatch_semaphore_t semaphore = dispatch_semaphore_create(2);   设置可共同执行的数量
 //任务1
 dispatch_async(quene, ^{
 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
 NSLog(@"run task 1");
 sleep(1);
 NSLog(@"complete task 1");
 dispatch_semaphore_signal(semaphore);
 });<br>
 //任务2
 dispatch_async(quene, ^{
 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
 NSLog(@"run task 2");
 sleep(1);
 NSLog(@"complete task 2");
 dispatch_semaphore_signal(semaphore);
 });<br>
 //任务3
 dispatch_async(quene, ^{
 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
 NSLog(@"run task 3");
 sleep(1);
 NSLog(@"complete task 3");
 dispatch_semaphore_signal(semaphore);
 });
 
 gcd原理:
 通过结构体和链表实现FIFO队列,FIFO队列管理是通过dispatch_async 等函数所追加的block  ,block 先加入dispatch continuation 结构体再加入队列
 
 
 
 六,实现线程同步的方法:
 dispatch_set_target_queue
 dispatch_group_create
 dispatch_barrier_asyne
 dispatch_semaphore
 */
/*
 nsopreation
 https://www.jianshu.com/p/4b1d77054b35
 
 https://www.jianshu.com/p/938d68ed832c
 锁
 
 OSSpinLock(自旋锁)和dispatch_semaphore的效率远远高于其他。
 nslock
 @synchronized和NSConditionLock效率较差。
 
 鉴于OSSpinLock的不安全,所以我们在开发中如果考虑性能的话,建议使用dispatch_semaphore。
 

 */

相关文章

  • iOS多线程 NSOperation

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程 pthread、NSThread

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程: GCD

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程运用

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程基础

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • 多线程介绍

    一、进程与线程 进程介绍 线程介绍 线程的串行 二、多线程 多线程介绍 多线程原理 多线程的优缺点 多线程优点: ...

  • iOS进阶之多线程管理(GCD、RunLoop、pthread、

    深入理解RunLoopiOS多线程--彻底学会多线程之『GCD』iOS多线程--彻底学会多线程之『pthread、...

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

网友评论

      本文标题:多线程

      本文链接:https://www.haomeiwen.com/subject/ribxdqtx.html