gpt4 book ai didi

java - 计算多线程代码中的吞吐量

转载 作者:行者123 更新时间:2023-12-01 14:39:03 25 4
gpt4 key购买 nike

我正在对我的一些客户端代码进行基准测试。现在我试图找出如何从我的多线程代码计算吞吐量 -

我正在使用 20 个线程 运行我的程序。每个线程将运行 15 分钟,因此所有 20 个线程将运行 15 分钟

下面是我的代码-

public static void main(String[] args) {

try {

// create thread pool with given size
ExecutorService service = Executors.newFixedThreadPool(20);

// queue some tasks
long startTime = System.currentTimeMillis();
long endTime = startTime + (15 * 60 * 1000);

for (int i = 0; i < 20; i++) {
service.submit(new CassandraReadTask(endTime, columnFamilyList));
}

service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
} catch (Exception e) {
LOG.warn("Threw a Exception in" + CNAME + e);
}
}

下面是我的类,它实现了Runnable接口(interface)-

class CassandraReadTask implements Runnable {

public void run() {

try {

while (System.currentTimeMillis() <= endTime) {

double randomNumber = random.nextDouble() * 100.0;

final String id = generateRandomId(random);

ICassandraClientDao clientDao = ClientFactory.getInstance().getDao(clientName);

clientDao.getAttributes(id, columnsList, columnFamily);

}
} catch (Exception e) {

}
}

}

从上面的代码中,我生成了一些随机 id,并且我使用该 id 传递给我的 getAttributes dao 方法。

据我了解。总吞吐量将为-

total number of request/ total duration the program was run

所以,就我而言,它将是-

total number of id's I have generated/15 minutes

我说得对吗?

最佳答案

只要正确计算(也许使用共享的AtomicInteger?)不同线程完成的所有请求,您就可以做得很好。

但是,我会稍微改变你的代码并提交 100,000 个(或其他)随机 ID,然后计算你的线程处理所有这些 id 所需的时间。这是一个更现实的测试,因为它可以更好地显示您的任务提交开销。

然后你只需输入一个 startTimeMillis 并计算从结束到开始的差异,然后计算 100,000(或任何你的数字)除以差异即可得到平均迭代/毫秒。

类似于:

long startTimeMillis = System.currentTimeMillis();
int numIterations = 100000;
for (int i = 0; i < numIterations; i++) {
double randomNumber = random.nextDouble() * 100.0;
final String id = generateRandomId(random);
service.submit(new CassandraReadTask(id, columnFamilyList));
}
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
long diff = System.currentTimeMillis() - startTimeMillis;
System.out.println("Average time per iteration is " + (numIterations / diff));

然后就可以轻松调整线程数和迭代次数来最大化吞吐量。

关于java - 计算多线程代码中的吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16180385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com