27

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

4

2 回答 2

38

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

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

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

对于实现,请查看线程池

于 2012-11-05T15:41:46.707 回答
21

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

我假设您正在谈论类似线程池的文档

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

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

当您使用Executors.newFixedThreadPool(10);(或其他类似方法)创建线程池时,您将创建一个由 10 个线程组成的池,这些线程可以运行任意数量的提交到池的不同RunnableCallable类。在被子下面,Thread由于它们的包裹方式,它们仍然更加灵活。

反应器模式而言,不同类型的事件由类似的处理程序线程运行。线程不绑定到单个事件类,但会在它们发生时运行任意数量的不同事件。

于 2012-11-05T15:37:29.373 回答