1、多线程的概念
Multithreading多线程是指从软件或硬件上,实现多个线程并发执行的技术。使得能够同步完成多项任务,提高资源使用效率。
1.1 任务、进程和线程
- 任务Task:应用程序完成的一个活动,一个task既可以是一个进程,也可以是一个线程;
- 进程Process:系统进行资源分配和调度的一个独立单位,在内存中有完备的数据空间和代码空间;
- 线程Thread:进程中的一个实体,CPU调度和分派的基本单位;
1.2 线程的Stack space
系统中每一个进程都有自己的内存空间,同个进程中多个线程共用进程的内存空间。
- 在Mac OS中,主线程的栈空间为8MB;
- 在Ios中,主线程的栈空间为1MB;
应用程序子线程默认栈空间大小为512KB,子线程允许分配的最小栈空间为16KB,并且必须是4KB的整数倍。开发者可以通过NSThread线程对象的stacksize来修改一个子线程的栈空间。
let thread = Thread.init(target: self, selector:(VIewController.threadAction),object:nil)
thread.stackSize = 1024*1024
- threadPriority: 0.0-1.0
- 系统默认优先级是0.5
- 高优先级并不是100%比低优先级先执行,只是得到CPU调度的纪律更高
1.4 线程的生命周期
- 创建 对线程对象进行初始化;
- 就绪 添加到线程池,等待CPU的调度;
- 运行 是线程处于执行状态;
- 阻塞 可以是线程休眠至指定的时间点,或者通过Lock给线程加锁;
- 消亡 执行完毕之后自动处于正常消亡状态;
2、三种常用的多线程技术
2.1 Thread