繁体   English   中英

使用CPU计时器控制线程来执行两个单独的操作是否会导致性能下降?

[英]Will using CPU timer control over threads for two seperate operations cause a decrease in performance?

我正在用C ++编写一个程序,该程序必须同时运行两个操作(或至少看起来像是在这样做)。 我一直读到线程是对此的最佳解决方案,但是我不太熟悉线程,而是按计划选择基于毫秒的基于计时器的控制来在操作1和操作2之间来回分配CPU资源。稍后再学习多线程。

我的程序运行正常,但运行缓慢,缓慢且有些断断续续。 这可能是由于我使用计时器分配资源的方式吗? 我在第一个操作中进行光视觉处理,并在第二个操作中更新GUI。

作为参考,我使用的是Intel i3-3110M和4 GB的DDR3 RAM。

一方面,使用计时器而不是线程意味着一次只能使用一个CPU内核。 使用线程,您的两个任务可以(至少原则上)每个都有自己的核心,因此它们实际上可以同时运行,从而使您潜在的2倍加速。

使用计时器的第二个问题实际上是第一个问题的必然结果:如果timer-event-number-1调用的例程花费的时间比预期完成的时间长,那么必然地,timer-event-number-2调用的例程将不会直到第一个例程返回后才可以启动,因此它将延迟启动。 如果通常(或每次)花费比预期更长的时间,则随着时间的流逝,对每个例程的调用将越来越“落后于计划”。

计时器的第三个问题是知道延迟多长时间。 也许对于视觉处理程序来说很明显(例如,如果视频以20fps的速度进入,则您可能希望将例程设置为每50mS执行一次),但是对于逻辑上相互依赖的任务(例如,第二个例程是应该消耗掉第一个例程产生的结果),这浪费了CPU周期,因为CPU可能最终没有理由在特定时间等待处理数据,而这同样可能早就处理完了并从中退出。方式。 在这种情况下,通常最好使用某种逻辑触发机制(例如,在第一个例程返回之前,第二个例程由第一个例程调用,或者在多线程情况下,让第一个例程发出信号量或唤醒的信号)第二个线程立即向上)。 即使在视频处理的情况下,通常最好让第一个例程由接收到视频帧来触发,而不是由计时器触发,因为如果计时器关闭得很晚,那您就浪费了宝贵的处理时间,而如果计时器很早就关闭了,尚无任何视频帧可供处理。

对于您的特定程序,其性能不佳可能是由于您使用了计时器,或者仅仅是您的例程效率不足,无法在您分配给他们的时间内完成工作它。 我建议在程序分析器下运行程序,找出程序大部分时间都花在哪里,然后研究使程序的这一部分更有效率的方法(然后再次进行测试和分析,然后重复进行,直到您对程序满意为止)。程序的性能)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM