gpt4 book ai didi

java - 两个串行任务比并行任务慢

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

嗨,我有一个网络应用程序 - 在一种方法中,我需要加密请求中的部分数据并将它们存储在磁盘上并返回响应。

响应与加密没有任何关系。

然而,加密非常需要时间。在这个问题中如何正确地创建线程等?

我尝试过类似的事情

线程线程...

线程.start();

JobDetail 作业 = cryptoScheduler.getJobDetail(jobDetail.getName(), jobDetail.getGroup());

encryptionScheduler.scheduleJob(jobDetail,TriggerUtils.makeImmediateTrigger("encryptionTrigger",1,1)

我尝试了 servlet,在加密之前我关闭了 outpuStream。

或者:Executors.newFixedThreadPool(1);

但无论我尝试什么,客户都必须等待更长时间。

顺便说一句:为什么会这样呢?可以更快吗?

我没有尝试在上下文初始化后启动线程并以某种方式等待需要加密的方法。

如何加快速度?

谢谢

--------------编辑://我使用axis 1.4,其中有Handler,它在invoke方法中加密一个值:

try {
LogFile logFile = new LogFile(strategy,nodeValue,path, new Date());
LogQueue.queue.add(logFile);
}
catch (Exception e) {
log.error(e.getMessage(),e);
}

EExecutor.executorService.execute(new Runnable() {
public void run() {
try {
LogFile poll = LogQueue.queue.poll();
String strategy = poll.getStrategy();
String value = poll.getNodeValue();
value = encrypt(strategy,value);
PrintWriter writer = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(poll.getPath(), true )),"UTF-8"));
writer.print(value);
writer.close();
}catch (IOException e ) {
log.error(e.getMessage(),e);
}
}

});
} catch (Throwable e ) {
log.error(e.getMessage(),e);
}

//此外我还有执行者服务

public class EExecutor { public static ExecutorService executorService = Executors.newCachedThreadPool();}

//真正有趣的是......当我将加密从这个处理程序移到另一个称为最后当我发送回复时!速度更快了。但是当我收到请求时将其留在第一个处理程序中。如果不使用线程/servlet 等,它甚至会更慢。

最佳答案

只有当部分任务可以并行完成时,线程才能为您提供帮助。听起来您正在等待加密完成然后返回结果。如果您有必要这样做(例如,因为加密数据结果),那么在单独的线程上进行加密对您没有帮助——它所做的只是引入创建和切换到不同线程的开销。

编辑:如果您为每次加密都启动一个线程,那么这可能是您的问题的一部分。创建新线程的成本相对较高。更好的方法是将 ExecutorService 与无界队列一起使用。如果您不关心加密步骤发生的顺序(即,如果由于时间 t 的请求而开始的加密比在时间 t' 开始的加密晚于在时间 t' 开始的加密完成是可以的,并且 t < t') ,那么你可以让ExecutorService拥有多个线程。这将为您提供更大的并发性,并节省您一直重新创建线程的开销,因为 ExecutorService 会池化并重用线程。

关于java - 两个串行任务比并行任务慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2230079/

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