Worker Thread模式在Request的管理上像是 Producer Consumer 模式,在Request的行为上像是 Command 模式。
Producer Consumer模式专注于Product的生产与消费,至于Product被消费时是作何处理,则不在它的讨论范围之中。 如果您的Product是一个Request,消费者取得Request之后,执行Request中指定的请求方法,也就是使用Command模式,并且您的Request缓冲区还管理了Consumer,就有Worker Thread模式的意思了。在Sequence Diagram上,可以看出Worker Thread同时展现了Producer Consumer模式与Command模式:
利用Java实现的一个Channel类如下所示:
import java.util.LinkedList;
public class Channel {
private LinkedList requests;
private WorkerThread[] workerThreads;
public Channel(int threadNumber) {
requests = new LinkedList();
workerThreads = new WorkerThread[threadNumber];
for(int i = 0; i < workerThreads.size(); i++) {
workerThreads[i] = new WorkerThread();
workerThreads[i].start();
}
}
public synchronized void putRequest(Request request) {
while(requests.size() >= 2) { // 容量限制为 2
try {
wait();
}
catch(InterruptedException e) {}
}
requests.addLast(request);
notifyAll();
}
public synchronized Request getProduct() {
while(requests.size() <= 0) {
try {
wait();
}
catch(InterruptedException e) {}
}
Request request = (Request) requests.removeFirst();
notifyAll();
return request;
}
}
Request类与WorkerThread类之间采的Command模式:
public class Request() {
// ....
public void execute() {
// do some work....
}
}
public class WorkerThread extends Thread {
// ...
public void run() {
while(true) {
Request request = channel.getRequest();
request.execute();
}
}
}
就行为上,WorkerThread就是有请求来了就作,如果没有请求,则所有的WorkerThread就等待,直到有新的工作进来而通知它们,取得请求的WorkerThread要作的工作,就直接定义在execute()中。
分享到:
相关推荐
Master-Worker是一个很好用的设计模式, 它可以把一个大工作分成很多小工作去执行, 等所有小工作都回来以后, 将所有的小工作结果做一个统整, 得到最终结果, 就很像专题小组有五个人, 把系统分成四等分, 每个人负责一...
`WorkerThread_demo`是一个典型的线程应用示例,它可能是为了展示如何在C#环境中创建和管理后台工作线程,以实现非阻塞的UI交互。下面我们将详细探讨线程的概念,`WorkerThread`类的设计,以及可能的实现方式。 ...
RuntimeError: DataLoader worker (pid(s) 9528, 8320) exited unexpectedly 去网上搜教程,说是在loader定义的时候多进程的参数指定的问题,我的loader定义如下 loader = Data.DataLoader( dataset=torch_dataset,...
Apache2 的 Worker 工作模式配置及 MaxClients 不足问题解决 Apache 服务器是当前最流行的 Web 服务器之一,它提供了多种工作模式,包括 Prefork、Worker 和 Event 等。其中,Worker 工作模式是 Apache 2.x 版本中...
std::thread t1(worker, std::ref(m)), t2(worker, std::ref(m)); t1.join(); t2.join(); return 0; } ``` 3. **线程局部存储**:每个线程都有自己的内存空间,可以用来存储特定于线程的数据。`std::thread_...
WorkerThread线程实例,C#建立WorkerThread "工作者线程"的例子,代码中已定义工作者线程中调用的公用委托,建立事件标识,用于停止线程,建立委托实例,用于调用接口函数,自定义了一个工作者线程处理函数,若停止...
AndroidChannel is helper library for inter thread communication between main thread and worker thread. AndroidChannel uses HandlerThread for inter thread communication. Setup Gradle dependencies { .....
项目简介 springboot酒店宾馆管理系统 本系统共分为三个角色:系统管理员、工作人员、前台人员该...前台人员:sever1 密码:worker1 项目技术 后端:Springboot、Mybatis、Mysql 前端:html、thymeleaf、jquery、layui
Worker + Layim + TP5简单客服系统 实现了功能: 1,可通过后台对聊天成员的增删改查2,实现了离线客服登录后聊天记录推送3,实现了表情和图片的发送4,实现了一对一聊天和聊天记录的查看5,实现了在线状态显示 注意...
良葛格的《Design Pattern学习笔记》不仅涵盖了经典的GOF设计模式,还额外介绍了几种多线程模式,这使得这份学习笔记成为了一个宝贵的学习资源。下面将对其中的部分设计模式进行详细介绍。 #### 二、GOF设计模式 ...
在 TypeScript 或 JavaScript 中,由于它们通常运行在单线程环境中,这个问题通常不需要考虑,但在服务器端如 Node.js 的集群模式或Web Worker中,可能需要额外的同步机制。 9. **注意事项**: 尽管单例模式在很多...
NextJS Worker示例这是使Web Worker在NextJS项目中运行的示例。 要使用worker-loader将Web Worker加载到NextJS站点上,并允许在其worker上运行babel等webpack加载器,必须覆盖构建输出路径。 感谢。 // next.config....
本示例"WorkerThread_Vc_"提供了一种创建和管理Worker线程的方法,包括如何启动线程、传递参数以及与主线程进行通信。 首先,要创建一个线程,我们需要定义一个函数,这个函数将在新线程中运行,我们通常称之为线程...
使用一个统一的API将CPU密集型任务卸载到node.js,Web浏览器和... 您可以在上找到thread.js的旧版本0.12。 此页面上的所有内容均引用1.0版,该版本是使用全新API重写的库。 安装 npm install threads tiny-worker
当面对高并发访问时,为了提升系统性能和可用性,我们可以采用负载均衡策略,其中"worker模式"是Apache mod_proxy模块的一种配置方式,用于实现对后端Tomcat服务器的负载均衡。 Apache的mod_proxy模块允许我们配置...
prefork 模式更适合内存有限且需要高度稳定性的环境,而 worker 模式则适用于需要处理大量并发请求且所有模块都线程安全的情况。但请注意,不是所有 PHP 模块都支持线程安全,因此在使用 worker 模式时需要额外注意...
工人赛跑者 Worker Runner是协助使用Web Worker的工具。目录初始化用所需的方法声明您的类。 export class LibraryRunner { // Example Runner public books : string [ ] constructor ( books : string [ ] ) { // ...
在这个"zookeeper实战:SingleWorker代码样例"中,我们将深入探讨如何使用ZooKeeper实现一个简单的SingleWorker模式,以及涉及的相关源码和工具。 首先,SingleWorker模式是ZooKeeper中常见的应用场景之一,常用于...
原始码workerman +网关worker元数据解读。为什么为什么要出这样的文章。原因是最近在项目中用到workerman + gateway worker。但苦于国内这块的资源太少了。所以就有了这个地方来存储我阅读workerman + gateway ...
### Manager Worker Thread System 在《Exemplo-Manager Worker Thread System.pdf》文档中,我们深入了解了一个基于Delphi的多线程系统的设计与实现方法。本文档不仅适用于Delphi开发者,也适用于那些希望了解如何...