用于在C ++中计算用户数据的线程

时间:2018-06-04 14:28:28

标签: c++ multithreading

我是C ++的新手(以及一般的线程),所以我希望你们能提供帮助。

我有几个用户,我给他们的数据是相应的CSV格式。对于每个用户,我必须进行许多计算,保存它们各自的输出,并将它们各自的输出添加到一个大型数组中并保存。

无论如何,我的代码看起来像这样:

for(unsigned int i=0; i<numUsers; i++){
    LoadPerson(&pName, &pNum); //Loads a User's Data and kicks of compuation
}

我有几个问题:

1)我可以使用线程吗?我可以同时进行多次这些计算吗?当它完成时,可以附加到上面提到的大数组中。

2)我想如果我这样做,我将不得不锁定大型数组,因为多个线程不能同时附加到同一个数组。这个假设是正确的/我将如何进行?

3)我可以同时拥有的线程数有限制吗?如果每个用户都有自己的线程,并且假设我有50个用户,那太多了吗?或者我应该做什么,我一次只踢10个用户,然后当一个完成另一个开始?因此,例如,我只会在用户1完成时启动用户11。同样,我如何使用线程实现它?

4)任何其他建议也会很棒。这是一个机器学习项目,在我开始进行建模之前,我必须梳理大量数据进行预处理。这很慢。我觉得这种低效率的大部分来自阅读这些非常大的CSV(线程可能会有所帮助)。但如果您有任何其他提示,请告诉我。感谢

2 个答案:

答案 0 :(得分:2)

上下文不是非常精确,所以答案是通用的

  

我可以使用线程吗?我可以进行多项计算吗?   立即行动,当它完成时,附加到提到的大阵列   上方。

如果在线程之间几乎没有数据可以共享,你可以在多线程中有效地进行这种计算

  

我想如果我这样做,我将不得不锁定大型数组,因为   多个线程不能同时附加到同一个阵列。是   那个假设是正确的/我该怎么做呢?

你是对的,你需要像锁

这样的同步机制
  

我一次可以拥有的线程数量是否有限制?如果每个   用户得到他们自己的线程,让我们说我有50个用户,就是这样   许多?或者我应该做什么,我一次只踢10个用户,   然后当一个人完成另一个人开始?所以,举个例子,我愿意   用户1完成后才启动用户11。再次,我该如何实施   有线程吗?

系统对线程的最大值进行了限制,但它通常远高于你想要的线程,如果你想获得良好的性能,你应该拥有尽可能多的线程,因为你的cpu有核心(提供的线程有相似的负载)。 50个线程可能很多

答案 1 :(得分:0)

将处理视为流经管道的数据 管道有不同的部分:读取,计算,输出。

+-----------+--------------+-------------+  
| Read data | Compute data | Output Data |  
+-----------+--------------+-------------+  

每个部分都可以是一个帖子 “读取”部分读取一些数据,然后将其传递给“计算”部分 Compute部分处理数据,然后传递给Output部分。

通过将每个部分作为线程,您可以拥有缓冲区,以便可以“并行”处理执行。

这是可以应用线程的众多场景之一。