我知道您可以通过信号量限制有限资源的使用,但是我如何才能将其应用于CPU (或内核,如果这是明智的做法)。
我有多个线程同时在一个处理器上运行。但是在其中一个线程上,我想运行一段代码,在那里我发送一个信号,并且我需要对信号返回所需的时间进行计时。信号似乎非常失真,而在过去,这些信号是好的。我确信硬件运行得很好,所以我认为添加这些额外的线程会导致响应脉冲的时间不准确。这是一个非常弱的cpu。我想试着阻止cpu做任何事情,除了检索和计时返回脉冲;我相信这应该是可能的。
下面是我想要实现的目标的简要介绍:
-multiple threads are running
-on the thread with the pulse signaling a pulse has been sent
--> stop cpu from processing other threads
--> return pulse has been received
--> cpu is now free to continue it's work我将在脉冲之间插入sleep()方法,这样cpu就不会被其他线程锁定。
我知道信号量是如何工作的,问题是,我如何让它在cpu上工作?
发布于 2013-11-21 05:51:14
CPython不能很好地处理多核系统上的CPU线程,除非您在操作系统中禁用除一个内核之外的所有内核。
下面是关于这个主题的演示文稿:https://www.youtube.com/watch?v=ph374fJqFPE
对于I/O受限的多线程工作负载,CPython做得很好,但即使是一个CPU受限的线程也会在多核上搞得一团糟。
我建议您考虑使用多处理而不是多线程,除非您是纯粹的I/O限制。或者使用Jython或IronPython,它们的线程都很好。
发布于 2013-11-21 05:57:23
处理这类事情的正常方法是调整线程的优先级。不幸的是,在Python中似乎无法做到这一点。一个previous question详细解释了为什么你不能这么做。我不确定我是否相信GIL会妨碍我的说法。我没有研究过GIL的实现,但实现它的一个明显的方法是使用本机线程工具的低级锁定原语(互斥等)。通常情况下,这些都会考虑线程优先级。不幸的是,如果你不能控制优先级,这似乎是没有意义的。
https://stackoverflow.com/questions/20106864
复制相似问题