0

在我的应用程序中,我的结构如下所示

if(iterationCount==-3)
{

  CreatFullNetwork(obj1)
}

if(iterationCount==-2)
{
  CreatFullNetwork(obj2)//Method is same as previous
}

if(iterationCount==-1)
{
//Obj1,2,3 are same object but the sorting order variables inside object are different
  CreatFullNetwork(obj3)//Method is same as previous
}

为了提高性能,我计划创建 3 个线程并并行运行。这是一个好方法吗?注意:CreatFullNetwork()这是一个非常庞大的方法,其中包含子方法并创建大量集合并更新它们

4

1 回答 1

3

在评论中,您声明该函数调用不受 CPU 限制。它没有达到接近 100% 的 CPU 利用率。在这种情况下,您的程序性能似乎不太可能通过多线程来提高。

最重要的是,您的代码似乎使用了许多不同步的共享变量。在您考虑并行运行代码之前,您需要处理该问题。通常有两种方法可以做到这一点:

  1. 序列化对共享变量的访问以避免数据竞争。
  2. 为每个线程安排其所需信息和变量的私有副本。

一般来说,选项 2 更好,因为序列化由于使用锁而具有性能开销。但是,选项 2 可能难以实现,并且在您需要复制大量数据的情况下可能会出现性能问题。

如果您的代码不受 CPU 限制,那么大部分内容都没有实际意义。也就是说,瓶颈可能在另一台机器上。也许瓶颈在于数据库访问。如果数据库可以有效地处理并行访问,那么线程可能会有所帮助。

最重要的是,您需要更清楚地了解您的代码在做什么以及限制性能的因素,然后才能考虑加速它的选项。线程不是万能的灵丹妙药。它无助于加速所有程序,您总是需要知道如何最好地部署它。

于 2013-11-14T07:26:37.333 回答