多线程研究

本文深入探讨了iOS中的多线程,包括进程与线程的概念,GCD(Grand Central Dispatch)的队列类型和业务场景,以及不同线程同步与异步、串行与并行的执行特性。通过分析各种组合,如同步+主队列、异步+普通队列等,阐述了线程数量对应用程序状态的影响,特别提到了线程死锁的情况以及线程池的工作原理。
摘要由CSDN通过智能技术生成

进程:应用层面
线程:上下文层面
GCD: 队列异同组>业务场景

具体表现:具体的Queue队列的调度命令码
当前(时刻点) 应用程序的活动状态
应用程序在当前的活动状态下存在多少个线程(条)
同步概念:最多存在1个线程(不支持线程间(动态)切换)
异步概念: 支持在多个线程间动态切换 (1+1)(1+N)
串行/并行概念:强调(层关系/行维度) 线程条的数量(任意个线程条 取决于所在的场景)
调度命令码本身内的块实例(正常情况默认开启)新上下文环境 具体是否开启取决于所在的场景
线程可着重强调内部自有的串特性也可着重强调彼此间的并特性
线程(条)(元地址) : 执行的抽象表现
线程(条) 对应着 (1个或多个)任意个不同的上下文环境 取决于所在的场景
1+N (N数(从1开始))
行维度/线程池内分为激活线程/惰性线程(1个激活线程其余为惰性线程)
同一个上下文环境内命令码的地位同级并触发过程由上而下 同上下文环境内先后的顺序大方向不变

长方体盒 线程池 整体对外呈现单维度进程体系
研究存在的线程
应用程序当前的活动状态下不存在线程情形:

  1. 0个线程
    同步+ (主队列)串行:死锁(直接崩溃/卡住/执行不了)(类似断点暂停)

应用程序当前的活动状态下只存在1个线程情形(调度命令码不开启新上下文环境):
2. 1个线程
异步+(主队列)串行:只存在并激活主main线程(当前main主环境内:上面布置普通命令下面布置调度命令)(命令触发过程:先执行外部上面指令再依次执行下面block事件内调度指令)
在这里插入图片描述

  1. 1个线程
    同步+(普通队列)串行 / 同步+全局队列并行/同步+(普通队列)并行: 只存在并激活主main线程(当前main主环境内:由上而下所有命令顺序不变)(命令触发过程:block事件 内外待执行级别相同有序进行即可(逻辑由上而下顺序))
    在这里插入图片描述

应用程序当前的活动状态下存在2个线程情形(调度命令码开启新上下文环境):
((1+N)个环境)
4. 2 = 1+1个线程
异步+(普通队列)串行:1main线程+1个普通线程(1+1)
在这里插入图片描述


应用程序当前的活动状态下存在多个线程情形:
5.异步+(普通队列)并行/ 异步+全局队列并行:1main线程+N个普通线程((1+N)个线程)
在这里插入图片描述


//步+行组合(指令元素块block)
- (void)syncTestWithQueue:(dispatch_queue_t)queue withBarrier:(BOOL)barrier {
   

    NSLog(@"1");
    dispatch_sync(queue,^{
   
        //((普通队列)串行+同步):block事件自然完成之前(block事件内的所有指令执行完成之前)(block事件所在的整个c函数调用指令执行完成之前cpu不会处理所在的c函数调用指令往后的同级别调用指令)(block事件所在的整个c函数调用指令执行完成之后cpu继续处理所在的c函数调用指令往后的同级别调用指令)(block事件 内外待执行级别相同有序进行即可)
        //(主队列)串行+同步:block事件所在的整个c函数指令直接出现阻塞效果(类似断点)(阻塞即暂停在(当前)前方状态下即调用处c函数指令不会触发执行一直中断)(即block事件不会触发且后面的逻辑事件均不触发)
        //同步+(普通队列)并行  :只激活原来的默认主main线程签(block事件外部与block事件所在的整个c函数调用指令同级别的其他同等指令的插入待执行级别等于block事件内的所有待执行指令的插入待执行级别)(block事件 内外待执行级别相同有序进行即可)
        //同步+全局队列并行:只激活原来的默认主main线程签(block事件外部与block事件所在的整个c函数调用指令同级别的其他同等指令的插入待执行级别等于block事件内的所有待执行指令的插入待执行级别)(block事件 内外待执行级别相同有序进行即可)
        //
        NSLog(@"start 1");
        sleep(3);
        NSLog(@"end 1");
        NSLog(@"NSThread1=%@",[NSThread currentThread]);
    });

    NSLog(@"2");
    dispatch_sync(queue, ^{
   
        NSLog(@"start 2");
        sleep
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HaiJunYa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值