threadpool - HawtDispatch 与 Java 的 Executors 有何不同? (和净)

标签 threadpool netty

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

让我们先来看看“线程池”部分。 Java提供的大部分Executor也基本都是线程池。 HawtDispatch 有什么不同?

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

最佳答案

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

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

  • 与 java 执行器模型不同,所有全局和串行调度队列共享一个固定大小的线程池。您可以在不增加线程数的情况下使用数千个串行调度队列。串行调度队列可以像 Erlang 邮箱一样使用来驱动响应式(Reactive) actor 风格的应用程序。

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

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

    关于threadpool - HawtDispatch 与 Java 的 Executors 有何不同? (和净),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9322252/

    相关文章:

    c++ - 防止线程不必要的退出并使池保持事件状态

    .net - 线程vs线程池-.Net 2.0

    java - Netty TCP 客户端异步消息

    java - 在netty中的单例类中使用threadlocal

    java - 将 gRPC 与 Vert.x 结合使用,netty 依赖问题

    java - Netty - 定期 HTTP 请求重用 channel

    C#多线程文件IO(阅读)

    threadpool - 控制 Mule 中的线程数

    multithreading - 在windbg 中分析!threadpool 和!threads 的输出

    android - Akka Remoting 是否仅支持单向连接?