代码之家  ›  专栏  ›  技术社区  ›  rob5408

n线程速度

  •  0
  • rob5408  · 技术社区  · 16 年前

    1) 覆盖“忙碌”屏幕

    2) 为每个线程启动一个线程

    3) 当最后一个线程退出时,移除覆盖层。

    另外,通常使用线程,以便在后台工作,而用户做其他事情,我使用它略有不同。我的应用程序是一个核心数据应用程序,我希望在模拟比赛时避免用户以其他方式接触商店。所以我大部分时间都想要单线程,但是在这种情况下需要多线程,因为sim引擎要花多长时间。如果有人对这种方法有其他的想法,我是开放的。

    抢劫

    5 回复  |  直到 16 年前
        1
  •  2
  •   Tom Andersen    16 年前

    我唯一的问题是,他们没有一个标准的方式来告诉来电者,他们已经完成。

    您可以定期轮询NSOperationQueue—当其计数为0时,就没有剩余的了。您还可以使每个操作增加一些计数器-当计数为50时,您就完成了。或者,每个操作都可以使用performSelectorOnMainThread在主线程上发布一个通知,说明其已完成。

    即使只有一个内核,你也会看到性能的提升——很多时候,主线程在等待用户输入/图形绘制等时会被阻塞。加上多核手机和iPad可能会在一年内推出(完全是猜测——但它们会出现)。

        2
  •  1
  •   Graham Perks    16 年前

    你在一个单核上,所以线程可能不会有多大帮助,开销甚至可能会减慢速度。

    首先要做的是使用工具来分析您的代码,看看什么可以加快速度。一旦你做了,你可以看看一些具体的瓶颈优化。

    一个简单的方法(如果您可以使用GCD)是dispatch\u apply(),它可以让您循环您的匹配,以适合您的硬件的最佳方式自动执行它们,并且在所有匹配完成之前不会返回。

        3
  •  0
  •   Şafak Gezer    16 年前

    但同时模拟所有匹配并不一定能提高性能。

        4
  •  0
  •   vodkhang    16 年前

    您可以从@downtoge获得特定问题的解决方案,但一般来说,我想给您一些关于多线程的建议:

    2/如果你的程序有一些需要时间的大IO、数据库或网络进程,那么你可以考虑多线程,因为现在数据处理不需要所有时间,它需要等待加载数据。在这种情况下,多线程将显著提高性能。但是您仍然需要小心,因为线程切换有开销。

    也许你只需要一个线程来进行IO处理,然后有一个缓存层来共享图像/数据。然后,您只需要主线程来循环并进行模拟

    3/如果您希望50个模拟似乎同时发生,以便用户观看,还需要多线程:)

        5
  •  0
  •   hotpaw2    16 年前