2012-02-17 35 views
11

令人沮丧的是,HawtDispatch的网站将其描述为“线程池和NIO事件通知框架API”。HawtDispatch与Java的执行程序有何不同? (和netty)

让我们先看看'线程池'部分。 Java提供的大多数执行程序基本上也是线程池。 HawtDispatch与众不同?

它也显然是一个“NIO事件通知框架API”。我假设它是顶级NIO上的一个薄层,它接收传入数据并传递给它的“线程池”概念,并在线程池计划程序找到时间时将其传递给使用者。正确? (欢迎对NIO进行任何改进)。有没有人做过netty vs HD的任何性能分析?

回答

17

HawtDispatch被设计为单个系统宽固定大小的线程池。它提供了实现2种口味的Java执行者:

  • 全球调度队列:已提交的Runnable对象同时执行(你得到使用Executors.newFixedThreadPool(n)执行效果相同)
  • 串行调度队列:已提交的Runnable对象串行执行(你得到使用Executors.newSingleThreadExecutor()执行人)

与Java执行模型的相同效果的所有全球和串行调度队列共享一个固定大小的线程池。您可以使用数千个串行调度队列,而不会增加您的线程数量。可以像使用Erlang邮箱一样使用串行调度队列来驱动反应演员风格的应用程序。

由于HawtDispatch正在使用固定大小的线程池来处理所有全局和串行队列执行,它所执行的所有可运行任务必须是非阻塞的。在某种程度上,它与NodeJS体系结构类似,除了它使用多个线程而不是一个线程。

与Netty相比,HawtDispatch不是实际处理套接字数据的框架。它没有提供编码/解码,缓存和处理套接字数据的框架。它所做的只是在非阻塞套接字上读取或写入数据时执行用户配置的Runnable。这取决于你的应用程序然后实际读/写套接字数据。

+3

Thanks @Hiram。我希望你展开一些扩展HawtDispatch文档,将它介绍给那些对苹果的libdispatch一无所知的人。坦率地说,这个描述是一个好的开始。也许是在使用Executors的过程中扩展了HD的好处。 – Shahbaz 2012-02-21 04:42:00

+0

@Shahbaz GCD有权调整池的大小,具体取决于可用CPU核的数量以及目前的繁忙程度。我已经看到,当队列中的许多作业都是I/O绑定的时候,它会增加线程数,从而使CPU保持忙碌状态。然而HawtDispatch似乎没有这样做。 – adib 2016-09-20 09:10:25