對於一個普通的應用程序,你永遠不會想這樣做。強制iPhone模擬執行CPU密集型任務嗎?
但是...我正在製作一個教育應用程序,以向人們展示在不同的iPhone硬件和操作系統級別的不同線程模型會發生什麼。 OS 4從根本上改變了不同的模型(IME:在OS 4上運行時大量現有的代碼不起作用)。我正在編寫一個交互式測試應用程序,可以讓你爲不同的模型(選擇器主線程,選擇器背景,nsoperationqueue等)啓動線程,並查看發生時GUI +主應用程序會發生什麼。
但是我想重現的一個常見用例是:「執行backgorund下載的線程然後執行CPU密集型結果分析」。我們在真實世界的應用程序中看到了很多。
這並非完全無關緊要; 「忙」的方式很重要。
那麼...我怎麼模擬這個?我正在尋找一些保證不會被優化編譯器(現在或者更好的編譯器)拋出的東西,並且足以強制線程在最大CPU上運行約5秒鐘。
注意:在我的真實世界的應用程序中,我注意到當iPhone線程忙碌時會發生一些奇怪的事情 - 例如,後臺線程會使主線程餓死,即使設置爲低優先級。雖然這顯然是Apple線程調度程序中的一個錯誤,但我想要做一個忙碌的事情來證明這一點 - 和/或一個忙碌的替代方案,它顯示了當您不在調度程序中觸發該行爲時發生的情況。
UPDATE:
例如,下面可以有不同的效果:
for(int i=0; i<1000; i++)
for(int k=0; k<1000; k++)
CC_MD5(cStr, strlen(cStr), result);
for(int i=0; i<1000000; i++)
CC_MD5(cStr, strlen(cStr), result);
......有時,至少,編譯器似乎優化後(我不知道是什麼編譯巫術是對於 - 些構建它沒有明顯差異,一些它確實:()
更新2:
25個線程,在第一代iPhone,做的Millio每個MD5都有...並且在GUI上幾乎沒有可察覺的效果。
5個線程使用捆綁的基於SAX的解析器解析XML通常會使GUI停止。
看來,MD5哈希不會觸發iPhone的馬車線程調度:(這些問題。我要去調查MEM分配代替,看看是否有不同的效果。
你剛剛說過,你想模擬一個「執行backgorund下載的線程,然後執行CPU密集型結果分析的線程」。你爲什麼不這樣做?即下載一堆隨機文件並在其上應用處理例程(如md5),但使用像100個線程。 – 5ound 2010-07-10 19:24:03
@ 5ound這應該是一個答案..你會得到我的+1,如果是的話。沒有人應該要求代碼在沒有任何工作的情況下自行構建。你的想法足以得到答案。 – Jann 2010-07-10 22:27:45
Jann - 它不起作用(我認爲它不那麼簡單)。這個理論是微不足道的,但實踐是什麼讓我難過:) – Adam 2010-07-10 23:06:47