多线程之---让页面假死与卡死

参考简书:http://www.jianshu.com/p/be70bd238af0

  • 线程与进程
  • 进程:正在运行的一个程序,主要负责资源分配以及资源的调度,不执行具体的代码
  • 线程:可独立执行的代码段,它是程序的具体执行单位
  • 一个程序至少会有一个线程(主线程) 界面的刷新必须在主线程完成
  • 假死 页面假死一般指的是程序还在运行,而界面动不了.一般是因为当前执行的任务耗时过长

  • 卡死 一般是指线程卡死

  • 任务分为 同步与异步

  • 同步(sync)

  • 异步(async)

  • 同步与异步的主要区别在于回不回堵塞当前线程,直到Block中的任务执行完毕

  • 在GCD中如果是同步(sync)的操作,它会阻塞当前线程并等待Block中的任务执行完毕,然后当前线程才会继续往下执行

  • 如果是异步(async)

  • 队列分为 并发队列 串行队列

理解一下串行队列以及并行队列的区别

  • 通俗点说:串行队列,就相当于目前只有一条小路,路一次只能过一个人,那么前面的人把路给堵死了后面的也就无法前进而被堵住了

  • 串行队列:放到传行队列的任务,GCD会FIFO(先进先出)地取出来一个,执行一个,然后取下一个,一个一个得执行下去

  • 并行队列:相当于不止是一条路,就算这条路被堵死了,我还可以走别的路,互相不影响

  • 并行队列中的任务:CGD也会FIFO地取出来,但不同的是,它取出来一个就会放到别的线程,然后再取出来一个放到另一个的线程.这样由于取的动作很快,忽略不计,看起来,所有的任务都是一起执行的.不过需要注意,GCD会根据系统资源控制并行的数量,所以如果任务很多,它并不会让所有的任务同时执行

  • 特别需要注意:同步,异步,并发,串行四个术语

  • 1:同步与异步主要影响,能不能开启新的线程

  • 同步:只是在当前线程总执行任务,不具备开启新线程的能力

  • 异步:可以在新的线程中执行任务,具备开启新线程的能力

  • 2: 并发和串行主要影响:任务的执行方式

  • 并发:多个任务并发执行,谁先执行完成不一定

  • 串行:一个任务执行完毕后,再执行下一个任务

屏幕快照 2015-12-21 17.01.23.png
  • 下面是验证串行任务异步执行 串行是FIFO(先进先出),并且一个执行完再执行别的
屏幕快照 2016-03-08 19.19.13.png
  • 下面对上面的代码修改一下将异步改为同步,看会出现什么情况
屏幕快照 2016-03-08 19.23.48.png
  • 接下来看并发异步的执行
屏幕快照 2016-03-08 19.32.50.png
  • 它的执行效果是这样的
屏幕快照 2016-03-08 19.31.14.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容