Java初学者:串口线程的成本

时间:2011-02-25 15:03:21

标签: java multithreading

我想知道如果我有(N)双向量,每个都有大的长度说10,000,我想通过制作(N)线程来操作操作(每个向量乘以3)。

我想知道如果使用并行(N)线程而不是串行操作的成本是多少?成本(记忆,速度等)?

或者使用线程实际上是更好的主意,因为我读过它会使用可用的内核吗?

3 个答案:

答案 0 :(得分:2)

是:每个线程都会耗尽资源:至少是内存,但也可能是操作系统进程或其他操作系统资源。细节将取决于JVM的实现。

如果内存使用量变得很高,您可能会因为更频繁的GC,分页以及计算机管理内存所做的事情而受到性能影响

答案 1 :(得分:0)

执行内存密集型操作时,缓存的大小可能比主内存的大小重要。由于较低的高速缓存是共享的,因此在使用多个内核时,密集使用这一个高速缓存可能无法提供很大的可伸缩性。但是,如果您最大限度地减少每个核心使用的数据量,或者您的操作非常重要,那么您可以获得接近线性的可扩展性

答案 2 :(得分:0)

您不希望为每个向量创建新线程(创建新线程的开销很大)。但是,在thread pool中执行此工作以利用多个核心可能是有意义的。

听起来好像:

  • 计算足够大,您可以从利用多个线程中受益
  • 各个向量足够大,可以用作工作块

如果上述情况属实,那么使用ThreadPoolExecutor可能是有意义的,这将使您能够将每个向量发送到线程池进行处理。