zoukankan      html  css  js  c++  java
  • iOS中的GCD多线程模型

    1.      什么是线程

    • 可并发执行的,拥有最小系统资源,共享进程资源的基本调度单位。
    • 共用堆,自有栈(官方资料说明iOS主线程栈大小为1M,其它线程为512K)。
    • 并发执行进度不可控,对非原子操作易造成状态不一致,加锁控制又有死锁的风险。

     

    2.      iOS中的线程

    • iOS主线程(UI线程),我们的大部分业务逻辑代码运行于主线程中。
    • 没有特殊需求,不应引入线程增加程序复杂度。
    • 应用场景:逻辑执行时间过长,严重影响交互体验(界面卡死)等。
    • iOS中的线程
      • NSOperation和NSOperationQueue
      • NSThread
      • NSCondition(线程
      • performSelectorOnMainThread(线程通信)
      • GCD

    3.      GCD – Grand Central Dispatch

    • 简化使用多核多线程的工作
    • block对象(块对象),可以理解为函数对象
    • 闭包
      • 闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义的。
    • __block存储类型
      • 和局部变量,静态变量,全局变量,位于堆中的变量一样为变量存储类型
      • 被block对象共享,block对象可对其进行读写操作

     

      • 在上图中,shared和captured变量为block1和block2的上下文环境,其中captured变量在block中始终为10,不能对其进行写操作,而block对象可以对shared对象进行读写操作,最终当所有block被执行完毕时,变量控件会被释放
    • 并发队列
      • dispatch_get_main_queue()
      • dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
    • 在并发队列上同步异步执行block
      • dispatch_sync 阻塞当前线程,并在指定线程执行代码,完成后返回
      • dispatch_async 不阻塞当前线程,在指定线程开始执行代码,立即返回

     

  • 相关阅读:
    pow()函数结果强制转化为int造成误差的分析
    warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    博客园鼠标点击特效代码
    codeblocks更改颜色主题
    codeblocks1712设置中文
    SQl
    项目中nodejs包高效升级插件npm-check-updates
    正则表达式的整理(将金钱数变成带有千分位)
    从一个数组中过滤出另外一个数组中相关字段相等的数据
    IONIC3 打包安卓apk详细过程(大量图文)
  • 原文地址:https://www.cnblogs.com/elvisyzhao/p/2619752.html
Copyright © 2011-2022 走看看