编写代码使CPU使用率显示正弦波
用您最喜欢的语言编写代码 并让 Windows 任务管理器代表 CPU 使用历史记录中的正弦波。
这是微软中国的技术面试测验。 我认为这是一个好问题。 尤其值得了解的是候选人如何理解并找出解决方案。
编辑:如果可能涉及多核(cpu)情况,这是一个好点。
Write code in your favorite language
and let Windows Task Manager represent
a sine wave in CPU Usage History.
This is a technical interview quiz from Microsoft China.
I think it's a good question. Especially it's worth knowing how candidate understand and figure out the solution.
Edit: It's a good point if may involve multi-core(cpu) cases.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
Windows 中的线程时间片为 40 毫秒,iirc,因此这可能是用作 100% 标记的好数字。
这将给出大约 14 秒的时间。 显然,这假设系统中没有其他重要的 CPU 使用情况,并且您仅在单个 CPU 上运行它。 这些在现实中都不那么常见。
A thread time slice in Windows is 40ms, iirc, so that might be a good number to use as the 100% mark.
This would give a period of about 14 seconds. Obviously this assumes there is no other significant cpu usage in the system, and that you are only running it on a single CPU. Neither of these is really that common in reality.
这是一个稍微修改过的@flodin的解决方案< Python 中的 /a>:
可以使用
time_period
和time_slice
参数微调 CPU 曲线。Here's a slightly modified @flodin's solution in Python:
A CPU-curve can be fine-tuned using
time_period
andtime_slice
parameters.好吧,我有一个不同的,可能比我的第一个答案更好的解决方案。
不要试图操纵 CPU,而是挂接到任务管理器应用程序中,强制它绘制您想要的内容而不是 CPU 结果。 接管绘制图形等的 GDI 对象。有点“作弊”,但他们没有说你必须操纵 CPU
,甚至没有从任务管理器中挂钩获取 CPU % 的调用,而是返回正弦结果。
Ok I have a different, probably BETTER solution than my first answer.
Instead of trying to manipulate the CPU, instead hook into the task manager app, force it to draw what you want it to instead of CPU results. Take over the GDI object that plots the graph, etc. Sort of "Cheating" but they didnt say you had to manipulate the CPU
Or even hook the call from task manager that gets the CPU %, returning a sine result instead.
如今一台 PC 运行着数百(数千?)个线程,我认为接近的唯一方法是尽快轮询 CPU 使用率,并且使用率百分比是否低于曲线上应有的位置,触发一个仅搅动数字的简短方法。 这至少会在需要的地方带来典型的低使用率,但我想不出一种好方法来降低它,而不以某种方式控制其他线程,并做一些事情,例如强制降低优先级。
With the literally hundreds (thousands?) of threads a PC runs today, the only way I can think to even come close would be to poll CPU usage as fast as possible, and if the usage% was below where it should be on the curve, to fire off a short method that just churns numbers. That will at least bring the typical low usage UP where needed, but I can't think of a good way to LOWER it without somehow taking control of other threads, and doing something such as forcing thier priority lower.
像这样的事情:
Something like this: