zoukankan      html  css  js  c++  java
  • User Mode Scheduling

    UMS线程有它们自己的内核线程状态,因此对于内核是可见的,这使得多个UMS线程都可以发出阻塞的系统调用、对资源进行共享或竞争,并且有每个线程特有的状态。然而,只要两个或多个UMS线程需要在用户模式下执行工作,它们可以周期行的切换执行环境(做饭是,一个线程让出执行权给另一个线程)而无需涉及内核调度器:环境切换在用户模式下完成。从内核的角度来看,同样的内核线程仍然在运行,一切都没有发生改变。当UMS线程执行需要进入内核的操作(比如系统调用)时,它切换到它的专属内核模式线程(称为定向环境切换)。

    Windows 内核架构师 – Dave Probert – 解释了 UMS 的产生动机: 上下文切换在用户模式会更快,因为它不需要在用户模式和内核模式之间频繁切换。 用户模式调度引入了可提升性能的协作式多任务。现在你可以构想一种线程,除非在内核中被阻塞(例如等待IO操作完成),否则不会其他线程(来自同一组的 UMS)抢占。这有利于如创建更高效的锁。 自定义的调度程序可以更好地控制线程的执行。例如,我们可以编写轮循调度程序以公平的方式逐个选择线程(这对有实时性要求的程序非常有用)。或者调度程序可以针对应用程序的特定事件作出反应 — 这些事件内核模式调度程序一无所知。 有关 UMS API 的详细内容可以在MSDN上找到 概括地说:用户模式调度( User Mode Scheduling – UMS) 是种轻量级的机制,应用程序用它来调度自己的线程。如果 UMS 线程在内核中被阻塞的话,应用程序不需要调用系统调度,就能切换用户态下的 UMS 线程,重新获得处理器控制权 。

    因此,对于管理那些数量巨大、不太需要系统调用而且工作时间较短的工作单元,这种在用户态下切换线程的能力使 UMS 比线程池要高效得多。

  • 相关阅读:
    宋宝华:slab在内核内存管理和用户态Memcached的双重存在
    能感知功耗的Linux调度器(EAS)
    内存检测王者之剑—valgrind
    随心所动,厂商的CPU核管理策略介绍
    一文读懂 进程怎么绑定 CPU
    Fastbootd实现原理分析
    cachestat、cachetop、pcstat-linux系统缓存命中率分析工具
    WIFI的WPS和pin码(测试失败)
    视频下载(钉钉、B站等) 解决方案
    DevExpress 报表设计文件(.vsrepx)不显示或显示空白
  • 原文地址:https://www.cnblogs.com/yifi/p/6911640.html
Copyright © 2011-2022 走看看