目录
1.进程与线程
二者是对CPU工作时间段的描述。
进程的时间段是:CPU加载程序上下文的时间+CPU执行时间+CPU保存程序上下文的时间。在执行进程之前,必须所有资源就绪,也就是上下文,包括环境信息/寄存器内容等。CPU执行任务都是这样一个一个串起来的。
线程就是对进程大颗粒度的细化,把一个任务分解成几个小任务,abc,三者共同使用进程的上下文,提高了CPU的利用效率,因为CPU执行时间短,而加载上下文时间长。过程就变成了:加载程序上下文+执行a+执行b+执行c+保存程序上下文。可以看出线程在进程下行进,且一个进程包括多个线程。
进程与进程之前数据几乎不共享,且彼此之间独立。线程之间共享进程的上下文(堆与方法区),且线程之间会相互影响,一个挂了会导致其他线程也挂掉。
线程在进程上执行不一定是线性的。可以对进程的某块内存地址进行上锁,别的线程想用必须等此线程使用完事。这个锁就是互斥锁。
进程是资源分配的最小单位,线程是CPU调度的最小单位。
多进程就是操作系统一次处理多个程序。多线程是在一个进程中同时运行多个任务,可以提升运行效率,并不能程序提升运行速度。不同线程之间存在抢占CPU的情况。在多核CPU上,多进程要比多线程性能好,因为切换多线程时,需要复制上下文到新核内,造成额外开销。应该面向不同场景用不同的方法。