我想知道如果我有(N)双向量,每个都有大的长度说10,000,我想通过制作(N)线程来操作操作(每个向量乘以3)。
我想知道如果使用并行(N)线程而不是串行操作的成本是多少?成本(记忆,速度等)?
或者使用线程实际上是更好的主意,因为我读过它会使用可用的内核吗?
答案 0 :(得分:2)
是:每个线程都会耗尽资源:至少是内存,但也可能是操作系统进程或其他操作系统资源。细节将取决于JVM的实现。
如果内存使用量变得很高,您可能会因为更频繁的GC,分页以及计算机管理内存所做的事情而受到性能影响
答案 1 :(得分:0)
执行内存密集型操作时,缓存的大小可能比主内存的大小重要。由于较低的高速缓存是共享的,因此在使用多个内核时,密集使用这一个高速缓存可能无法提供很大的可伸缩性。但是,如果您最大限度地减少每个核心使用的数据量,或者您的操作非常重要,那么您可以获得接近线性的可扩展性
答案 2 :(得分:0)
您不希望为每个向量创建新线程(创建新线程的开销很大)。但是,在thread pool中执行此工作以利用多个核心可能是有意义的。
听起来好像:
如果上述情况属实,那么使用ThreadPoolExecutor可能是有意义的,这将使您能够将每个向量发送到线程池进行处理。