参考简书://www.greatytc.com/p/be70bd238af0
- 线程与进程
- 进程:正在运行的一个程序,主要负责资源分配以及资源的调度,不执行具体的代码
- 线程:可独立执行的代码段,它是程序的具体执行单位
- 一个程序至少会有一个线程(主线程) 界面的刷新必须在主线程完成
假死 页面假死一般指的是程序还在运行,而界面动不了.一般是因为当前执行的任务耗时过长
卡死 一般是指线程卡死
任务分为 同步与异步
同步(sync)
异步(async)
同步与异步的主要区别在于回不回堵塞当前线程,直到Block中的任务执行完毕
在GCD中如果是同步(sync)的操作,它会阻塞当前线程并等待Block中的任务执行完毕,然后当前线程才会继续往下执行
如果是异步(async)
队列分为 并发队列 串行队列
理解一下串行队列以及并行队列的区别
通俗点说:串行队列,就相当于目前只有一条小路,路一次只能过一个人,那么前面的人把路给堵死了后面的也就无法前进而被堵住了
串行队列:放到传行队列的任务,GCD会FIFO(先进先出)地取出来一个,执行一个,然后取下一个,一个一个得执行下去
并行队列:相当于不止是一条路,就算这条路被堵死了,我还可以走别的路,互相不影响
并行队列中的任务:CGD也会FIFO地取出来,但不同的是,它取出来一个就会放到别的线程,然后再取出来一个放到另一个的线程.这样由于取的动作很快,忽略不计,看起来,所有的任务都是一起执行的.不过需要注意,GCD会根据系统资源控制并行的数量,所以如果任务很多,它并不会让所有的任务同时执行
特别需要注意:同步,异步,并发,串行四个术语
1:同步与异步主要影响,能不能开启新的线程
同步:只是在当前线程总执行任务,不具备开启新线程的能力
异步:可以在新的线程中执行任务,具备开启新线程的能力
2: 并发和串行主要影响:任务的执行方式
并发:多个任务并发执行,谁先执行完成不一定
串行:一个任务执行完毕后,再执行下一个任务
- 下面是验证串行任务异步执行 串行是FIFO(先进先出),并且一个执行完再执行别的
- 下面对上面的代码修改一下将异步改为同步,看会出现什么情况
- 接下来看并发异步的执行
- 它的执行效果是这样的