我知道你可以通過信號量來限制有限資源的使用,但是如何使它適用於CPU(或內核,如果這是明智的做法)。在Linux中用信號量阻塞cpu可能嗎? (Python)
我在單個處理器上同時運行多個線程。但是在其中一個線程中,我想運行一段代碼來發送一個信號,並且需要時間來讓信號恢復。信號看起來非常失真,而過去這些信號一直很好。我肯定硬件工作正常,所以我相信添加這些額外的線程已經使響應脈衝的時間不準確。這是一個非常脆弱的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
我將插入睡眠()脈衝之間的方法,使得CPU不被鎖定了其他線程。
我知道信號量如何工作,問題是,我如何使它在CPU上工作?
我相信,如果這是CPython並且這些是Python線程,那麼一次只能運行一個線程。這是因爲Python的Global Interpretor Lock(GIL)。您調用的C代碼不受GIL支配。進程是另一回事。 – octopusgrabbus
是的,我正在使用CPython。我應該更清楚地澄清......我只有一個處理器,所以恐怕多處理是不可能的。我現在正在考慮使用作業調度程序來模擬線程優先級。這就是維基百科關於什麼樣的作業調度功能包括:'優先級和/或隊列來控制無關作業的執行順序'。這看起來正是我正在尋找的。所以我會在運行我的代碼塊之前提高線程的優先級,然後再將優先級恢復爲正常。這是推理的好方法嗎? – Babyburger
我對線程的瞭解很老,只限於Microsoft NT。微軟希望人們在20世紀90年代後期開始使用他們的工具和技術開始使用線程編程,在多核板出現之前。而且,使用線程在UI中提供了一些有用的效果。然而,有一些不同之處,我認爲多線程和進程仍然需要調度並分別在一個處理器上輪流進行。而且,你仍然需要考慮GIL。 – octopusgrabbus