在非常高负载的环境中使用Executors

时间:2017-09-12 15:09:09

标签: java java.util.concurrent

我设法使用Stripe Framework编写REST API。在我的API中,我有几个需要执行和组合其结果的任务。我想出了一种方法,借鉴了JavaScript,它将把任务产生到几个线程并加入而不是按时间顺序实现。因此,我使用了ExecutorService,但是当请求数量非常大,任务完成的时间比我预期的要长时,我发现了实施的瓶颈。

我的问题与实现相同目的的另一种方式有关。

  1. 如何根据请求创建执行程序
  2. 如何扩展执行者的尺寸
  3. 为了演示,让我们在Javascript上考虑这种方式

    import Promise from 'bluebird';
    let tasks = [];
    tasks.push(task01);
    tasks.push(task02);
    Promise.all(tasks).then(results => { do_sth_here!} )
    

    将这个想法带到Java,我已经实现了如下

    ExecutorService exec = Executors.newCachedThreadPool();
    List<Callable<Promise>> tasks = new ArrayList<>();
    List<Future<Promise>> PromiseAll;
    
    try {
        tasks.add(() -> TaskPromises(Input));
        tasks.add(() -> TaskPromise(Input));
        PromiseAll = exec.invokeAll(tasks);
        for (Future<Promise> fr : PromiseAll) {
            // do_some_thing_next
        }           
    }
    

0 个答案:

没有答案