multithreading - 并发程序效率和CPU线程数

标签 multithreading scala concurrency cpu

大家好,我正在Scala中开发一个并发程序,我正在运行一些测试来检查效率,但是我似乎得到了一些非常奇怪的数字。

在每项测试中,我都会增加产生的“ worker ”或过程的数量。我期望随着这些过程从1增加到通信开销和竞争条件变得足够高而将其抵消的程度,运行时间会增加。因此,例如,我期望看到类似的东西:

流程------ 1 ------ 2 ------ 3 ------ 4 ------ 5 ------ 6 ------ 7

运行时间(秒)---- 3 ------- 2.5 ------- 2 ------- 1.5 ------- 2 ------- 2.5- ------ 3

无论如何,我想问的是,是否有人知道Intel Core i5-430M处理器可以容纳多少个线程。我知道它通常具有EDIT:2个核心和4个线程。这是否意味着在生成5个或更多进程后性能应该开始变差?像上面的例子吗?

任何帮助,将不胜感激。

最佳答案

使用Runtime.getRuntime()。availableProcessors()。通常,对于CPU密集型应用程序,使用更多线程不会比可用内核/CPU数量多。但是,例如,如果某些线程阻塞了IO操作,则可以从拥有更多线程中受益。

请注意,只要有可能,就应该使用java.util.concurrent库,而不是编写自己的并行化/并发代码。

关于multithreading - 并发程序效率和CPU线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5431982/

相关文章:

c++ - 为什么线程会减慢程序的执行速度?

java - LinkedBlockingQueue 无法等待线程执行

java - 有没有一个并发队列可以让N个消费者分别消费N次这个item?

java - 无法在 Java 中运行长期存在的进程

scala - Spark 在 HadoopRDD 上耗时过长 : Input split

c++ - 使用 OnDraw() 的 MFC 并发

mysql - 并发处理大量插入和查询组合的理想设计

c# struct array 的并发性

scala - KeeperErrorCode = NoNode for/brokers/topics/test-topic/partitions

multithreading - 在 S3 存储桶之间并行移动文件