Мы пытаемся следить за этим блогом и понимать deferredresult. https://www.linkedin.com/pulse/building-async-non-blocking-microservices-using-spring-patnaik/
В блоге человек дал нормальный блокирующий и неблокирующий код. Я скопировал это здесь.
Человек запустил jmeter для одновременного тестирования 1000 потоков в течение 5 минут. Он упомянул, что задержки и tps были разными для неблокирования с кодом. Когда я пытаюсь увидеть его, используя jmeter с одинаковыми деталями, я вижу одинаковую задержку как для неблокирования, так и для блокировки.
Я уже пробовал уменьшать и увеличивать время и т. Д.
public SpringBootAppController() {
timer = new Timer();
ses = new ScheduledThreadPoolExecutor(10);
}
@RequestMapping("/blockingprocess")
public String blockingProcessing(@RequestParam(value="processingtime") long processingtime) throws InterruptedException
{
long startTime = System.currentTimeMillis();
Thread.sleep(processingtime);
//add more processing later
long endTime = System.currentTimeMillis();
long timeTaken = endTime-startTime;
return "SUCCESS. Blocking process completed in " + timeTaken + " Ms";
}
@RequestMapping("/nonblockingprocess")
public DeferredResult<String> nonBlockingProcessing(@RequestParam(value="processingtime") long processingtime) throws InterruptedException
{
DeferredResult<String> deferredResult = new DeferredResult<String>();
NewProcess j = new NewProcess(deferredResult, processingtime);
ses.schedule(j,processingtime, TimeUnit.MILLISECONDS);
System.out.println("hello");
return deferredResult;
}
Другой класс.
public NewProcess(DeferredResult<String> deferredresult, long processingtime)
{
this.deferredresult = deferredresult;
this.processingtime = processingtime;
}
@Override
public void run()
{
String result = "SUCCESS non blocking process completed in " + processingtime + " Ms";
deferredresult.setResult(result);
}
Ожидается разница и лучшая производительность для неблокирования по сравнению с блокировкой.