當我編寫一個運行10分鐘的簡單應用程序時,它啓動10個線程一次(pthreads),每個在循環中休眠1 ms(不做其他任何事情) 。 44%(top
報道)。它是一個450 MHz的ARM9 CPU,使用Linux 2.6.37作爲操作系統。沒有其他程序在運行,它嘗試了不同的內核配置(動態蜱,軟/硬中斷,高分辨率定時器,...,...),不同的優先級(高達99),但數字保持不變一樣。 /usr/bin/time -v
顯示約。 5'200'000自願上下文切換和ca.內核空間花費了3分鐘。在每個線程的睡眠。 5毫秒,CPU利用率下降到約。 9%,這仍然是國際海事組織瘋狂(40'500'000週期,以安全的一些寄存器)。 clock_nanosleep用於睡眠(CLOCK_REALTIME/CLOCK_MONOTONIC沒有改變任何東西)。在ARM9上的Linux上的線程性能降低
我知道完整的上下文切換在ARM9上是昂貴的,因爲緩存必須被清除。但一個簡單的線程切換或切換到操作系統應該不是那麼昂貴的恕我直言(地址空間保持不變,不需要緩存/ TLB刷新)。這是常見的還是應該嘗試找到內核的瓶頸?
你用什麼原始的'睡眠'? (我不知道你的問題,但似乎可能是有趣的。) – Mat 2012-04-14 09:30:19
@Mat忘記補充說,改變它 – azraiyl 2012-04-14 09:32:07