Попытка понять улучшение производительности отложенного результата - PullRequest
0 голосов
/ 13 октября 2019

Мы пытаемся следить за этим блогом и понимать 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);
    }

Ожидается разница и лучшая производительность для неблокирования по сравнению с блокировкой.

...