美文网首页
多线程之---让页面假死与卡死

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

作者: qiongyong | 来源:发表于2016-03-08 19:43 被阅读1520次

    参考简书: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

    相关文章

      网友评论

          本文标题:多线程之---让页面假死与卡死

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