- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个方法,其逻辑需要约 40 毫秒
当我多次(并行)调用此方法时 - 每个循环持续时间需要更多时间(很多)。
例如:
1 次调用 - ~40 毫秒(平均)
5 次调用 - ~63 毫秒(平均)
10 次调用 - ~120 毫秒(平均)
100 次调用 - ~1200 毫秒(平均)
等等...
代码:
int numberOfExecution = 100;
ExecutorService executor = Executors.newFixedThreadPool(numberOfExecution);
for (int i = 0; i < numberOfExecution; i++) {
executor.execute(new Runnable() {
@Override
public void run() {
MyObject obj1 = readBytesFromFile(1);
MyObject obj2 = readBytesFromFile(2);
MyObject obj3 = readBytesFromFile(3);
MyObject obj4 = readBytesFromFile(4);
final Map<Integer, MyObject> objects = new TreeMap<>();
objects.put(0, obj1);
objects.put(1, obj2);
objects.put(2, obj3);
objects.put(3, obj4);
Foo foo = new Foo(objects);
long startTime = System.currentTimeMillis();
Thread.sleep(40); // sleep for 40ms to demonstrate my 40ms logic
long endTime = System.currentTimeMillis();
float durationMs = endTime - startTime;
System.out.println("Foo.bar() duration: " + durationMs);
}
});
}
executor.shutdown();
while (!executor.isTerminated()) { }
控制台:
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 43.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 41.0
Foo.bar() duration: 48.0
Foo.bar() duration: 62.0
Foo.bar() duration: 48.0
Foo.bar() duration: 48.0
Foo.bar() duration: 48.0
Foo.bar() duration: 48.0
Foo.bar() duration: 49.0
Foo.bar() duration: 48.0
Foo.bar() duration: 49.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 41.0
Foo.bar() duration: 42.0
Foo.bar() duration: 49.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 49.0
Foo.bar() duration: 74.0
Foo.bar() duration: 40.0
Foo.bar() duration: 70.0
Foo.bar() duration: 40.0
Foo.bar() duration: 50.0
Foo.bar() duration: 43.0
Foo.bar() duration: 40.0
Foo.bar() duration: 43.0
Foo.bar() duration: 56.0
Foo.bar() duration: 63.0
Foo.bar() duration: 45.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 43.0
Foo.bar() duration: 43.0
Foo.bar() duration: 48.0
Foo.bar() duration: 41.0
Foo.bar() duration: 58.0
Foo.bar() duration: 59.0
Foo.bar() duration: 55.0
Foo.bar() duration: 42.0
Foo.bar() duration: 40.0
Foo.bar() duration: 42.0
Foo.bar() duration: 70.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 75.0
Foo.bar() duration: 40.0
Foo.bar() duration: 43.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 67.0
Foo.bar() duration: 59.0
Foo.bar() duration: 40.0
Foo.bar() duration: 57.0
Foo.bar() duration: 42.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 43.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 42.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 42.0
Foo.bar() duration: 42.0
Foo.bar() duration: 41.0
Foo.bar() duration: 45.0
Foo.bar() duration: 44.0
Foo.bar() duration: 40.0
Foo.bar() duration: 42.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 45.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 44.0
Foo.bar() duration: 41.0
Foo.bar() duration: 42.0
Foo.bar() duration: 40.0
Foo.bar() duration: 42.0
Foo.bar() duration: 41.0
Foo.bar() duration: 42.0
Foo.bar() duration: 42.0
Foo.bar() duration: 43.0
Foo.bar() duration: 43.0
在 MacBook Pro i9 上运行
我错过了什么?
最佳答案
一台机器的核心数量是固定的。随着我们增加需要并行执行的线程数量,线程之间将会发生上下文切换。
请查看https://www.javamex.com/tutorials/threads/context_switch.shtml .
此外,线程之间可能存在资源争用。可以并行运行的最大线程数取决于机器核心。简而言之,仅仅增加线程数并不会提高代码执行性能。
关于java - 增加踏板数量会导致循环持续时间更长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59533579/
所以我的问题是: 为什么(以及如何避免)C# 中的 Is 运算符的生命周期比 if 中使用的更长? 例子: Animal a = new Cat(); if (a is Cat c) { Co
我遇到了这个问题,我已经尝试解决了很长一段时间。理想情况下,我希望 particles.js 的“生成框”向下延伸到页面底部(由 fullpage.js 计算的 7 x viewport),这样当使用
我想让一个 div(我的侧边栏)延伸到页面底部。我知道我需要添加“高度:100%;”为了做到这一点。 但是当我添加 height: 100%; 时,内容少于侧边栏的页面会降低侧边栏的高度,然后您就看不
只有我这么认为吗,还是在 SQL Server 2008 Management Studio 中扩展数据库列表比在 SQL Server 2005 Management Studio 中扩展数据库列表
我是一名优秀的程序员,十分优秀!