一、常驻线程

001 常驻线程指的是那些一直存在于内存的线程。

002 通过NSRunloop添加runloop的方法有:

run方法。通过run方法添加runloop,会不断重复调用runModel:beforeDate:方法来确保自己不会停止

runUntilDate和runModel:beforeDate:可以通过指定时间来停止runloop

003 如果每个库都通过一个常驻线程这样做不但不能提高CPU的利用率反而会降低执行效率,

004 解决方案:可以选择使用 NSRunLoop 的另外两个方法 runUntilDate: 和 runMode:beforeDate,来指定线程的保活时长。让线程存活时间可预期,总比让线程常驻,至少在硬件资源利用率这点上要更加合理。或者,你还可以使用 CFRunLoopRef 的 CFRunLoopRun 和 CFRunLoopStop 方法来完成 runloop 的开启和停止,达到将线程保活一段时间的目的。

二、并发

001 GCD(Grand Central Dispatch)是由苹果公司开发的一个多核编程解决方案。它提供的一套简单易用的接口,极大地方便了并发编程。同时,它还可以完成对复杂的线程创建、释放时机的管理。

002 在类似于数据存储这样需要等待磁盘响应的任务的场景,随着任务数量增加,GCD创建的新线程会越来越多,从而导致内存资源越来越紧张;

等到磁盘开始响应后再读取数据会占用更多内存结果会引发内存问题

003 解决方案:并行队列转化为串行队列来执行,避免大并发读写磁盘操作造成内存问题

三、内存问题

新建一个线程,系统还需要为这个进程空间分配一定的内存作为线程堆栈。堆栈大小是 4KB 的倍数。在 iOS 开发中,主线程堆栈大小是 1MB,新创建的子线程堆栈大小是 512KB。除了内存开销外,线程创建得多了,CPU 在切换线程上下文时,还会更新寄存器,更新寄存器的时候需要寻址,而寻址的过程还会有较大的 CPU 消耗。所以,线程过多时内存和 CPU 都会有大量的消耗,从而导致 App 整体性能降低,使得用户体验变成差。CPU 和内存的使用超出系统限制时,甚至会造成系统强杀。这种情况对用户和 App 的伤害就更大了。

IOS 多线程 常驻线程,并发,内存问题相关推荐

  1. iOS多线程同时操作同一内存造成野指针

    iOS多线程同时操作同一内存造成野指针 iOS多线程同时操作同一内存造成野指针,原因:崩溃线程崩中使用指针的真正创建与销毁地方在另另外一个线程中,崩溃线程只是使用这个指针拷贝. 这两个操作发送在两个线 ...

  2. Java多线程与线程并发库高级应用笔记

    以下内容是学习张老师Java多线程与线程并发库高级应用时所做的笔记,很有用 网络编辑器直接复制Word文档排版有点乱,提供原始文件下载 先看源文件概貌 张孝祥_Java多线程与并发库高级应用 [视频介 ...

  3. java基础巩固笔记(5)-多线程之线程并发库

    2019独角兽企业重金招聘Python工程师标准>>> java基础巩固笔记(5)-多线程之线程并发库 标签: java [TOC] 本文主要概述java.util.concurre ...

  4. java多线程 占用内存_java线程池常驻线程占内存吗

    看了下代码: public void run() { try { Runnable task = firstTask; firstTask = null; while (task != null || ...

  5. Java多线程(五) —— 线程并发库之锁机制

    参考文献: http://www.blogjava.net/xylz/archive/2010/07/08/325587.html 一.Lock与ReentrantLock 前面的章节主要谈谈原子操作 ...

  6. IOS多线程 - 使用线程加载一张图片 - NSThread(1)(转)

    更新UI的操作在IOS中其实和在Android中是一致的,都是不能在主线程中执行比较耗时的操作,所以需要开启新线程去做这些操作,以免阻塞主线程,当新线程中的操作完成之后,调用主线程来更新UI.下面就是 ...

  7. Java多线程之线程并发库原子性操作类

    AtomicInteger 用得不当被笑掉大牙 AtomicIntegerArray AtomicIntegerFieldUpdater:对类中整数字段进行操作,需要先反射获取对象身上的字段 即ato ...

  8. Java多线程之线程并发库阻塞队列的应用

    ArrayBlockingQueue(jdk中已经提供 就在那个condition类说明里的可阻塞示例程序的下面就说明了) 注意三个添加方法的区别->查API文档 拿插入来说 一个会抛异常 一个 ...

  9. IOS 多线程04-GCD详解 底层并发 API

    IOS 多线程04-GCD详解 底层并发 API 注:本人是翻译过来,并且加上本人的一点见解. 前言 想要揭示出表面之下深层次的一些可利用的方面.这些底层的 API 提供了大量的灵活性,随之而来的是大 ...

最新文章

  1. TVM yolov3优化代码修改(编译运行OK)
  2. 安卓 发送短信两种方式
  3. 仅仅是又多了一本设计书吗 《软件框架设计的艺术》序
  4. Digital Color Meter 颜色值提取工具
  5. 翻译:FireBug 1.10 新特性
  6. C语言学习之分别用while、for 编写程序,计算2*4*6*......*100的值
  7. linux卡死在选择内核界面,求助:am3352 linux内核启动时卡在 Starting kernel ...
  8. 信息安全工程师笔记-入侵检测技术原理与应用
  9. eclipse clean和build作用
  10. 医疗行业GSP过检利器—医疗器械GSP管理系统
  11. vm虚拟机显卡是不是比服务器主板上的要好,自VM11起,虚拟显卡的性能是增强还是削弱?...
  12. Project2019入门到精通
  13. java 实现热搜_搜索推荐系统根据用户搜索频率(热搜)排序
  14. (pyqt5 qml qt quick) QAbstractTableModel.columnCount() is abstract and must be overridden
  15. Git 分支管理最佳实践
  16. Win10 企业版 2016 长期服务版激活
  17. Mac苹果移动硬盘数据丢失怎么恢复?
  18. 华为OD机试题:英文输入法单词联想
  19. 【160313 18:00】四则运算 2 的单元测试
  20. 用例建模-绘制用例图

热门文章

  1. ExoPlayer的使用介绍
  2. 如何让邮件的收发行为真正有效
  3. 编辑器 的保存怎么绑定事件_适合新手用的公众号文章编辑器,你必须知道这一款...
  4. lammps数据后处理:python绘制应力应变曲线 附程序代码
  5. 长得像的人DNA也相似,这事儿有科学实锤了
  6. 概率性抽卡模拟器v2.0(GUI实现)
  7. Wine + QQ 轻聊版 7.7 的安装步骤
  8. Jmeter 性能测试
  9. 树莓派4b——设置DS3231模块 并从DS3231模块读取系统时间
  10. 用Matlab求解一维非稳态导热问题(有限差分法+显式离散)