大家好,我正在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/