对于一个普通的应用程序,你永远不会想这样做。强制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