HawtDispatch与Java的Executors有何不同? (和netty)

时间:2012-02-17 02:55:10

标签: threadpool netty

令人沮丧的是,HawtDispatch的网站将其描述为“线程池和NIO事件通知框架API。”

让我们首先考虑'线程池'部分。 Java提供的大多数Exec​​utor也基本上都是线程池。 HawtDispatch有何不同?

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

1 个答案:

答案 0 :(得分:17)

HawtDispatch旨在成为单个系统范围的固定大小的线程池。它提供了两种Java Executors实现:

  • Global Dispatch Queue:提交的Runnable对象同时执行(使用Executors.newFixedThreadPool(n)执行程序获得相同的效果)
  • Serial Dispatch Queue:已提交的Runnable对象是串行执行的(使用Executors.newSingleThreadExecutor()执行程序获得相同的效果)

与java executor模型不同,所有全局和串行调度队列共享一个固定大小的线程池。您可以使用数千个串行调度队列而不增加线程数。串行调度队列可以像Erlang邮箱一样用于驱动反应式actor风格的应用程序。

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

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