代码之家  ›  专栏  ›  技术社区  ›  dash-o

有效处理复杂的未来混合工作负载

  •  0
  • dash-o  · 技术社区  · 4 年前

    用于completionService的默认公共池。completeAsync使用带有(处理器-1)线程的池。鉴于大部分处理等待数据库工作,默认公共池未充分利用本地机器资源。

    对于熟悉gnu make的读者-相当于make基于负载限制并发处理的能力。

    0 回复  |  直到 4 年前
        1
  •  1
  •   lutzh    4 年前

    我不确定我是否正确理解了你的问题,但无论如何我都会尝试回答。所以我的理解是,在一个固定大小的线程池上运行大量请求,您会发现您的CPU没有得到充分利用,因为这些线程经常被阻塞,等待数据库的响应。

    所以一般来说,我认为您想要的是防止工作线程被I/O阻塞。不要让线程池变大以补偿阻塞的I/O,而应该使用非阻塞的数据库驱动程序,并完全消除阻塞I/O。

    不同的数据库有不同的方法。有些在本机上支持异步I/O,有些则通过为DB I/O维护单独的线程池来提供这种错觉。一些与更高级别的抽象集成,例如 Reactive Streams

    对于 Redis 例如,有一个替代的Java驱动程序,名为 Lettuce ,这提供了一个 asynchronous API reactive API . (免责声明:我本人没有使用过莴苣。)