当前位置:  开发笔记 > 编程语言 > 正文

MultiThread运行速度比单个进程慢

如何解决《MultiThread运行速度比单个进程慢》经验,为你挑选了2个好方法。



1> Davide Loren..:

瓶颈是磁盘.

您每次只能使用一个线程访问磁盘,因此使用多个线程无济于事,而线程切换所需的加班时间将减慢您的全局性能.

只有当你需要拆分你的工作等待在不同的源(例如网络和磁盘,或两个不同的磁盘,或许多网络流)上进行长I/O操作,或者如果你有一个cpu密集型操作可以使用多线程时,使用多线程是很有趣的.在不同的核心之间分裂.

请记住,对于一个好的多线程程序,您需要始终考虑:

切换线程之间的上下文时间

长I/O操作可以并行完成

计算的密集cpu时间是否存在

cpu计算可以在子问题中拆分或不拆分

在线程之间共享数据的复杂性(信号量或同步)

与单线程应用程序相比,难以读取,编写和管理多线程代码



2> Danny_ds..:

可能有不同的因素:

最重要的是避免同时从多个线程访问磁盘(但是因为你在SSD上,你可能会侥幸逃脱).但是,在普通的硬盘上,从一个文件切换到另一个文件可能需要10毫秒的搜索时间(取决于数据的缓存方式).

1000个线程太多,尝试使用核心数*2.太多时间只会丢失切换上下文.

尝试使用线程池.总时间在110毫秒到130毫秒之间,其中一部分来自创建线程.

一般来说,在测试中做一些更多的工作.定时110ms并不总是那么准确.还取决于当时正在运行的其他进程或线程.

尝试切换测试的顺序,看看它是否有所作为(缓存可能是一个重要因素)

countLinesThread(num);
countLinesOneProcess(num);

此外,根据系统,currentTimeMillis()可能具有10至15毫秒的分辨率.因此,短时间运行并不是非常准确.

long start = System.currentTimeMillis();
long end = System.currentTimeMillis();

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有