在 Russinovich 的书中它说线程(注意:这是关于 OS 线程)将需要分派(dispatch)(调度)如果它 a) 准备好 b) 结束它的时间片、产量或 block 。
我的 C# 实时应用程序中有一个托管线程,对于实现尽可能少的上下文切换非常重要。
此线程具有最高优先级,进程具有实时优先级,这使得我的线程操作系统优先级为 31 中的 26。
当我的线程结束其时间片并且没有优先级 >= 26 的等待线程时,我的线程会发生什么?
是否会有上下文切换来重新安排我的线程再次运行,或者将避免上下文切换并且线程将不间断地运行?
如果有上下文切换 - 谁能告诉平均需要多少 CPU 周期?
我希望得到简单且明确的答案!
谢谢!
最佳答案
如何在非实时操作系统上制作实时应用程序? Here's实时操作系统信息
如果您的线程具有最高优先级,您最终可能会遇到无响应的系统 ( http://blogs.msdn.com/b/oldnewthing/archive/2010/06/10/10022675.aspx)
What is going to happen to my thread when it ends its timeslice and there are no waiting threads with priority >= 26 ?
如果没有其他具有相同或更高优先级的线程,并且您的线程没有阻塞( sleep 、等待等)——那么系统将使用新的时间片重新安排它。
来自 MSDN article :“系统将所有具有相同优先级的线程视为平等的。系统以循环方式为所有具有最高优先级的线程分配时间片。如果这些线程都没有准备好运行,系统将以循环方式分配时间片轮询方式分配给具有下一个最高优先级的所有线程。如果一个更高优先级的线程可以运行,系统将停止执行较低优先级的线程(不允许它完成使用它的时间片),并分配一个完整的高优先级线程的时间片"
Will be there a context switch to reschedule my thread to run again or context switch will be avoided and the thread will be running uninterrupted?
当线程转换到内核模式(阻塞、休眠)时会发生上下文切换 您可以使用 Thread.SpinWait 防止线程上下文切换。
If there will be context switch - can anyone tell how many CPU cycles it takes on average?
假设上下文切换是由中断启动的,在 (2.8 GHz) P4 上从用户级切换到内核级的开销是 1348 个周期,在 (200 MHz) P2 上是 227 个周期。为什么周期差异大?似乎 P4 刷新其微操作缓存作为处理中断的一部分(请访问 arstechnica.com 了解有关微操作缓存的一些详细信息)。算上实际时间,P4耗时481ns,P2耗时1335ns。
从内核级返回到用户级将在 P4 上花费 923 个周期(330 ns),在 P2 上花费 180 个周期(900 ns)。
存储/恢复寄存器的开销(不计算任何 TLB 开销/不包括 FPU 寄存器存储/恢复的成本)在 P4 上为 188 个周期(67 ns),在 P2 上为 79 个周期(395 ns)。 (取自here)
关于windows - C# 当托管线程结束其时间片时,它会引发上下文切换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3077975/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我在rspec中收到来自webkit驱动程序的以下消息:Capybara::Driver::Webkit::WebkitInvalidResponseError:UnabletoloadURL:http://127.0.0.1:44923/posts几天前它成功了。问题出在save_page方法上。有什么问题吗? 最佳答案 当我的页面出现错误时,我收到过类似的错误消息。您应该通过在测试模式下启动服务器(railss-etest)并自行访问页面来手动检查情况是否如此。 关于ruby-on-
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
如果我有以下一段Ruby代码:classBlahdefself.bleh@blih="Hello"@@bloh="World"endend@blih和@@bloh到底是什么?@blih是Blah类中的一个实例变量,@@bloh是Blah类中的一个类变量,对吗?这是否意味着@@bloh是Blah的类Class中的一个变量? 最佳答案 人们似乎忽略了该方法是类方法。@blih将是常量Bleh的类Class实例的实例变量。因此:irb(main):001:0>classBlehirb(main):002:1>defself.blehirb