在Linux中导致线程切换的操作是什么
发布时间:2020-06-16 点击数:1491
在Linux中导致线程切换的操作是什么?针对此问题,本文提供了相应的分析和答案,希望可以帮助更多希望解决此问题的朋友找到一种更简单的方法。
Linux使用一对一线程模型,用户线程切换和内核线程切换之间的差异很小。同时,如果您忽略了放弃用户线程执行权的用户成本(收益),则只需考虑内核线程切换的成本。
注意,这只是为了简化理解。实际上,用户线程库在用户线程的调度和同步中做了很多工作,这部分开销不可忽略。
如JVM在Thread#yield()上所解释的:如果底层OS不支持yield的语义,则JVM允许用户线程旋转到时间片的末尾,并且该线程被动切换以实现类似的效果。
是什么导致线程切换
时间片旋转
线程阻塞
线程主动放弃时间片
直接开销
直接开销是由线程切换本身引起的,这是不可避免的,并且不可避免地会发生。
在用户模式和内核模式之间切换
线程切换只能在内核状态下进行。如果当前用户处于用户状态,将不可避免地导致用户状态和内核状态之间的切换。 (<font color =“ red”>“在用户模式和内核模式之间切换”的费用是多少?</ font>)
上下文切换
如前所述,线程(或进程是任意的)信息需要使用task_struct保存。切换线程时,必须从内核中切出旧线程的task_struct,并切入新线程以进行上下文切换。另外,您还需要切换寄存器,程序计数器,线程堆栈(包括操作堆栈,数据堆栈)等。
线程调度算法
线程调度算法需要管理线程的状态,等待条件等。如果调度基于优先级,则还需要维护优先级队列。如果线程频繁切换,则不应低估成本。
高架
间接开销是直接开销的副作用,并且取决于系统实现和用户代码实现。
快取未命中
要切换进程,需要执行新的逻辑。如果两者访问的地址空间不相似,将导致高速缓存未命中,具体影响取决于系统实现和用户代码实现。如果系统高速缓存很大,则可以减少高速缓存未命中的影响;如果用于用户线程访问数据的地址空间较小,则高速缓存未命中率本身相对较低。
在此共享了导致Linux中线程切换的操作,希望全网数据小编的分享能帮助到你,全网数据为广大用户提供专业化深圳服务器托管,深圳服务器租用,深圳主机托管,云服务器租用等服务器资源,详情欢迎咨询客服了解。
下一篇:Linux中df命令的介绍和使用