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

Sha*_*baz 11 threadpool netty

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

我们先来看一下'线程池'部分.Java提供的大多数Exec​​utor也基本上都是线程池.HawtDispatch有何不同?

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

Hir*_*ino 17

HawtDispatch被设计为单个系统范围的固定大小的线程池.它提供了两种Java Executors实现:

  • 全局调度队列:提交的Runnable对象同时执行(使用Executors.newFixedThreadPool(n)执行程序获得相同的效果)
  • Serial Dispatch Queue:提交的Runnable对象是串行执行的(使用Executors.newSingleThreadExecutor()执行程序可以获得相同的效果)

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

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

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

  • 谢谢@Hiram.我希望你扩展一下HawtDispatch文档,将它介绍给那些对Apple的libdispatch一无所知的人.坦率地说,这种描述是一个良好的开端.也许某些东西可以扩展HD的好处,而不仅仅是使用Executors. (3认同)