这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战
前言
上一篇章我们讲了进程与线程的抽象比喻,回顾一下,我们主要把进程比作一条道路,这个道路有多个线路,每个线路就是我们的线程,这次我们深入了解一下CPU对进程线程影响。
CPU的"时间"
天上一天,地上一年的神话故事大家听得不少,神仙在天上的时间速度是与地上的时间速度不一样的,因为度量单位的不同,造就了宏观与微观上的不同。其实CPU的一个核心同一时间只能处理一个任务,也就是同一时间只能处理一个进程,在学术上这个称为 时间片。
时间片
每个程序执行有自己的时间片段,cpu由于是纳秒级别的,这就意味着一个任务cpu可以很快很快很快很快很快的完成,人经常以秒或毫秒来感受,甚至毫秒人都很难感受到,别说比微秒单位还要小的纳秒。所以这就造成微观与宏观的不同,在微观上实际上cpu以纳秒级别的时间单位处理着你现在使用的计算机任务,在宏观上也就是日常使用计算机的感受触发,你就感觉这些应用是同时打开的一样,那你边听音乐,边打字,边浏览网页,你感觉他们在同一时间进行。但是在纳秒级别的世界里,实际上cpu是在处理每个程序的时间片,听音乐任务进行一点后停止,以纳秒速度进行切换到你的打字任务,在以纳秒的速度切换到浏览网页,然后如此往复直到你在宏观上结束了他们的任务。
这种在学术上称为 上下文切换或任务切换。
上下文切换
进程其实是会在cpu的寄存器开启一片内存空间,用于存放处理数据与上下文关系,进程会存储下一个需要处理的指令位置,这样当其中一个线程的时间片用完,线程就会挂起并保存状态,保存状态是为了下次调用它是会回到原来的状态可以让用户无感,然后cpu就会使用这个地址寻找到下一个指令的执行,从而实现上下文切换。
总结
- 进程更像是个线程管家,它有内存给线程共享使用
- cpu的处理时间是纳秒级别可能更小??反正就是处理的速度是人类无法想象的,它快到在你花掉1s的时间它完成了绕地球3圈赛跑
- 这里没有提出一个点那就是上下文频繁切换会大量消耗CPU的时间