【问题标题】:What are worker threads, and what is their role in the reactor pattern?什么是工作线程,它们在反应器模式中的作用是什么?
【发布时间】:2012-11-05 15:34:33
【问题描述】:

我正在尝试理解 Reactor 模式(并发),但在许多示例中,他们都在谈论“工作线程”。什么是工作线程?它们与“普通”线程有何不同?它们在反应器模式中的作用是什么?

【问题讨论】:

  • 请提供您所讨论的参考文献的链接。
  • 我在该网站上看不到“工作线程”@Jon。
  • 对,但这只是反应堆模式,这是另一个today.java.net/pub/a/today/2007/02/13/…
  • 下面的答案很好,但我认为他们遗漏了一点:“工作线程”的实现方式与任何其他线程的实现方式之间没有区别。唯一的区别是它们执行的代码。我们称它们为“工作线程”,因为它们等待工作。就是这样。

标签: java multithreading design-patterns reactor


【解决方案1】:

Reactor pattern 与工作线程一起使用以克服应用程序中的一个常见情况:您最终需要做大量工作,但您不知道哪些工作以及何时以及创建线程是一项昂贵的操作。

这个想法是你创建了很多一开始不做任何事情的线程。相反,他们“等待工作”。当工作到达时(以代码的形式),某种执行器服务(反应器)从池中识别空闲线程并分配它们要做的工作。

这样,您可以付出代价创建所有线程一次(而不是每次都必须完成一些工作)。同时,您的线程是通用的;他们会做任何分配给他们的工作,而不是专门做某事。

有关实现,请查看thread pools

【讨论】:

  • 不错的答案。我不知道反应堆模式。
  • 很好的解释,这真的很有帮助。
【解决方案2】:

什么是工作线程,它们在反应器模式中的作用是什么?

我假设你在谈论 like this documentation on thread-pools:

java.util.concurrent 中的大多数执行器实现都使用线程池,它由工作线程组成。这种线程与其执行的Runnable和Callable任务分开存在,常用于执行多个任务。

工作线程是普通线程,但它们与它们所处理的RunnableCallable 类分开存在。如果您扩展 Thread 或使用 Runnable 参数构造 Thread,则任务直接与 Thread 对象相关联。

当您使用Executors.newFixedThreadPool(10);(或其他类似方法)创建线程池时,您将创建一个包含 10 个线程的池,这些线程可以运行任意数量的不同 RunnableCallable 类,这些类提交到池中。在封面之下,它们仍然是 Thread,只是因为它们的包装方式更加灵活。

reactor pattern 方面,不同类型的事件由类似的处理程序线程运行。线程不绑定到单个事件类,而是会在发生时运行任意数量的不同事件。

【讨论】:

  • 感谢您的解释,这真的很清楚。 Runnable 和 Callable 接口有区别吗?
  • 看看 Javadocs @Jon。 Runnable 有一个方法 void run()Callable<T> 有一个方法 T call()Callable 方法允许您从提交到工作池的作业中返回一个值。
猜你喜欢
  • 2010-11-24
  • 2014-06-18
  • 2011-06-29
  • 1970-01-01
  • 2015-02-06
  • 2014-06-29
  • 2010-11-08
  • 2011-10-04
  • 2017-05-30
相关资源
最近更新 更多