我试图理解 Reactor 模式(并发),但在许多示例中,他们都在谈论“工作线程”。什么是工作线程?它们与“普通”线程有何不同?它们在反应器模式中的作用是什么?
Reactor 模式 与工作线程一起使用,以克服应用程序中的常见情况:您最终需要做很多工作,但您不知道哪些工作以及何时进行,创建线程是一项昂贵的操作。
这个想法是你创建了很多线程,这些线程一开始什么都不做。相反,他们“等待工作”。当工作到达时(以代码的形式),某种执行服务(反应器)从池中识别空闲线程并分配它们工作。
这样一来,您就可以支付创建所有线程一次的代价(而不是每次都必须完成一些工作)。同时,你的线程是通用的;他们会做任何分配给他们的工作,而不是专门做一些特定的事情。
有关实现,请查看线程池。
什么是工作线程,它们在反应器模式中的作用是什么?
我假设你在谈论一些东西比如这个关于线程池的文档:
java.util.concurrent 中的大多数执行器实现都使用线程池,它由工作线程组成。这种线程独立于它执行的Runnable和Callable任务而存在,常用于执行多个任务。
工作线程是普通线程,但它们与它们工作的
Runnable
或 Callable
类分开存在。如果你扩展 Thread
或者你构造一个带有 Thread
参数的 Runnable
,任务直接绑定到 Thread
对象。
当您使用
Executors.newFixedThreadPool(10)
(或其他类似方法)创建线程池时,您创建了一个线程池,该线程池可以运行提交给池的任意数量的不同 Runnable
或 Callable
类。在盖子下面,它们仍然是 Thread
只是因为它们的包裹方式而更加灵活。
就反应器模式而言,不同类型的事件由类似的处理程序线程运行。线程不依赖于单个事件类,但会在事件发生时运行任意数量的不同事件。