我们知道使用多线程的目的是为了充分利用多核CPU,比如说我们是16核,但是当创建很多线程比如说160个,CPU不够用了,此时就是一个CPU来应付多个线程(这里我们是一个CPU应对10个线程)。这个时候,操作系统采用时间片轮转的方式把每个线程分配给CPU去执行,线程在时间片内占用CPU执行任务,当线程使用完时间片后,就会处于就绪状态并让出CPU让其它线程占用,这就是上下文切换。如果当前线程CPU没有执行完,另一个优先级更高的线程需要CPU时,CPU会保存当前状态(如寄存器信息、堆栈指针等),转而去执行优先级更高的线程,完成后会根据保存的状态继续执行原线程。
线程的上下文切换是一项开销较大的操作,会影响程序的性能,因此在设计并发程序时需要尽量避免线程的上下文切换,合理设置线程的优先级和数量,避免线程间的竞争和阻塞,提高程序的并发性能。
画图演示: