在日常开发中,多线程的使用能帮助我们解决很多问题,比如大量数据的运算,复杂程序的执行,以及利用锁来实现一些需求,本系列文章主要介绍 iOS 中多线程实现技术的用法。
多线程 一个进程中可以开启多条线程,每条线程可以并行执行不同的任务,以充分利用资源,提高运算效率。
多线程原理 同一时间,CPU 只能处理 1 条线程,只有 1 条线程在执行,多线程并发执行,其实是 CPU 快速地在多条线程之间调度(切换),如果 CPU 调度线程的时间足够快,就造成了多线程并发执行的假象,并不是 CPU 在同一时刻同时执行多个任务。
优点 能适当提高程序的执行效率; 能适当提高资源利用率(CPU、内存利用率)。
缺点 开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能; 线程越多,CPU 在调度线程上的开销就越大。
在 iOS 中,多线程解决方案主要有以下四种:
iOS:多线程(二) —— NSThread
这篇文章我们先来介绍 pthread
pthread 是一套通用的多线程的 API,可以在Unix / Linux / Windows 等系统跨平台使用,使用 C 语言编写,需要程序员自己管理线程的生命周期,使用难度较大。
pthread_create() 就是创建线程的方法,只需填写四个参数,就可以创建线程,我们来看一下输出 pthreadMethod() 的方法是在子线程执行,而主线程的输出先于子线程执行,说明子线程的耗时任务不会影响主线程的执行逻辑。
pthread_t: 线程ID pthread_attr_t: 线程属性 pthread_create(): 创建一个线程 pthread_exit(): 终止当前线程 pthread_cancel(): 中断另外一个线程的运行 pthread_join(): 阻塞当前的线程,直到另外一个线程运行结束 pthread_attr_init(): 初始化线程的属性 pthread_attr_setdetachstate(): 设置脱离状态的属性 pthread_attr_getdetachstate(): 获取脱离状态的属性 pthread_attr_destroy(): 删除线程的属性 pthread_kill(): 向线程发送一个信号 pthread_equal(): 对两个线程的线程标识号进行比较 pthread_detach(): 分离线程 pthread_self(): 查询线程自身线程标识号
以上是关于 pthread 的介绍和简单使用的说明,相关 demo 请参考 https://github.com/G-Jayson/Multi-thread