Thread Costs
线程开销
每条线程的内存空间都涉及到哪些?
线程是如何使用这些内存空间?
- 用于管理线程,协调调度线程的核心数据存储在 内核内存空间
- 线程调用栈数据,线程执行时需要的数据,存储在 应用内存空间
为什么创建一条线程开销比较大?
创建线程的开销
空间开销
- Kernel data structures 大约 1KB, 在 wired memory 部分中申请,不能缓存到硬盘
- Stack space
- 对于 iOS 的主线程,大约 1MB
- 对于衍生出来的次要线程,大约 512KB, 虽然数据是这么写,但是部分内存空间是使用到的时候才会进行申请。一次最小申请 16KB, 申请的单位为 4KB 的倍数
时间开销
大约 90ms, 因设备配置不同而不同
时间的计算方法:从 调用创建线程的代码 到 线程的入口开始执行时
其他
- 由于系统内核的支持,实际上使用 operation objects 来创建线程是快很多的,内部会维护一个线程池
- 设计多线程编程时,应尽量避免需要维护数据同步,否则会拖慢运行速度