计算密集型任务要进行大量的计算,消耗CPU资源,如视频解码等,启用与CPU核心数相同的并行任务数可最大化利用CPU资源和加快任务的执行;IO密集型任务,如网络、磁盘IO等,CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度),任务数适当增多,CPU效率将提高。
实现多任务有如下几种模式:
- 多进程模式:在多核CPU上运行多个进程(数量与CPU核心数相同)可充分利用多核CPU计算能力。由于系统同时运行的进程数少,因此系统调度也非常高效。但每个系统允许同时运行的最大进程数量是有限的;
- 多线程模式;
- 多进程 + 多线程模式;
- 多协程模式;
- 异步IO复用模式:也称事件驱动。Nginx就是支持异步IO复用的Web服务器,在单核CPU上采用单进程就可以高效地支持多任务。用异步IO复用来实现多任务也是一个主要的应用趋势,但是无法充分利用多核CPU的计算能力。
下文将通过对线程、LWT、协程等相关概念的介绍来反映这些构建模式的差异。
线程
线程通常由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成,是进程中的一个实体,是系统独立调度分派的基本单位;线程也有就绪、阻塞