gpt4 book ai didi

java - Java Spring Async性能

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

我们有一项将一些数据写入文件的服务。每个请求的新文件。例如:

GET http://service.somecompany.com/save/{data}

该请求将创建新文件 /var/files/{random-name}.txt

服务是使用@Async构建的,以避免客户端在写入文件时等待。请参阅代码示例:
@Controller
public class SomeController {

@Autowired
private SomeService someService;

@RequestMapping(value = "/save/{data}", method = RequestMethod.GET)
public @ResponseBody
String add(@PathVariable("data") String data) {
someService.saveData(data);
return "Ok!";
}
}

SomeService实现:
@Service
public class SomeServiceImpl implements SomeService {

@Async
public Future<Boolean> saveData(String data) {
// file saving with BufferedWriter ...
return new AsyncResult<Boolean>(successful);
}
}

当前,每个请求将创建一个新线程。但是,如果我要发送10万个数据保存请求-它们将创建最大可用线程数。那将使数据写入速度太慢。
最好限制线程数:
<task:annotation-driven executor="taskExecutor" />
<bean id="taskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolExecutorFactoryBean">
<property name="corePoolSize" value="100" />
<property name="maxPoolSize" value="250" />
<property name="keepAliveSeconds" value="60" />
</bean>

但是,如果要限制-选择哪种尺寸?也许以某种方式不同地提高性能是真的吗?你怎么认为?

最佳答案

顺序执行时,磁盘IO更快(尤其是在非SSD驱动器上,我认为SSD也是如此)。如果您的任务除了写磁盘之外没有执行任何其他操作(没有多线程可受益的计算),我将只使用一个线程。

关于java - Java Spring Async性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27075842/

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