行业新闻

行业新闻

在Linux中导致线程切换的操作是什么

发布时间:2020-06-16 点击数:1275

 在Linux中导致线程切换的操作是什么?针对此问题,本文提供了相应的分析和答案,希望可以帮助更多希望解决此问题的朋友找到一种更简单的方法。

Linux中引起线程切换的操作


Linux使用一对一线程模型,用户线程切换和内核线程切换之间的差异很小。同时,如果您忽略了放弃用户线程执行权的用户成本(收益),则只需考虑内核线程切换的成本。

注意,这只是为了简化理解。实际上,用户线程库在用户线程的调度和同步中做了很多工作,这部分开销不可忽略。

如JVM在Thread#yield()上所解释的:如果底层OS不支持yield的语义,则JVM允许用户线程旋转到时间片的末尾,并且该线程被动切换以实现类似的效果。

是什么导致线程切换

时间片旋转

线程阻塞

线程主动放弃时间片

直接开销

直接开销是由线程切换本身引起的,这是不可避免的,并且不可避免地会发生。

在用户模式和内核模式之间切换

线程切换只能在内核状态下进行。如果当前用户处于用户状态,将不可避免地导致用户状态和内核状态之间的切换。 (<font color =“ red”>“在用户模式和内核模式之间切换”的费用是多少?</ font>)

上下文切换

如前所述,线程(或进程是任意的)信息需要使用task_struct保存。切换线程时,必须从内核中切出旧线程的task_struct,并切入新线程以进行上下文切换。另外,您还需要切换寄存器,程序计数器,线程堆栈(包括操作堆栈,数据堆栈)等。

线程调度算法

线程调度算法需要管理线程的状态,等待条件等。如果调度基于优先级,则还需要维护优先级队列。如果线程频繁切换,则不应低估成本。

高架

间接开销是直接开销的副作用,并且取决于系统实现和用户代码实现。

快取未命中

要切换进程,需要执行新的逻辑。如果两者访问的地址空间不相似,将导致高速缓存未命中,具体影响取决于系统实现和用户代码实现。如果系统高速缓存很大,则可以减少高速缓存未命中的影响;如果用于用户线程访问数据的地址空间较小,则高速缓存未命中率本身相对较低。

在此共享了导致Linux中线程切换的操作,希望全网数据小编的分享能帮助到你,全网数据为广大用户提供专业化深圳服务器托管,深圳服务器租用,深圳主机托管,云服务器租用等服务器资源,详情欢迎咨询客服了解。


用户至上,用心服务

全网数据以"用户至上,用心服务每一位用户"为宗旨,您可以把您的应用放心的交给我们,全网数据为您提供完美解决方案和数据中心服务。

免费咨询