Thread-Per-Message 模式
来源:互联网 发布:软件制作大师 编辑:程序博客网 时间:2024/06/05 10:53
如果您現在設計一個Service元件,可以接受客戶端的資料並交給一個Helper元件處理,假設資料處理很複雜,也就是Helper處理會需要一段時間,如果您這麼設計:
那麼客戶端每次都必須等Service元件處理完畢後,才可以進行下一次資料傳送,也就是Service對客戶端的回應性會很差。
您可以改用這樣的設計:
Service對於每個資料接收之後,馬上使用一個執行緒來處理,因此accept()方法會很快的返回,Service對於客戶端可以有很高的回應性。
以UML順序圖來表示以上範例的話:
Thread-Per-Message模式可應用在Service需要有高回應性的場合。服務端對每個請求使用一個執行緒來處理(從這些執行緒角度看,它們是 Worker Thread),如果服務端在乎建立新執行緒的負擔,則可以考慮結合使用Thread pool 模式。這個模式常用於多人網路連線程式,伺服端接受連線後,使用一個執行緒來處理該次連線,伺服端可馬上傾聽下一個客戶端連線。
使用Python來實現以上範例的話:
class Helper { void process(int data) { System.out.println("開始處理 " + data); try { Thread.sleep(3000); // 處理過程很費時 } catch(InterruptedException e) { e.printStackTrace(); } System.out.println("處理完成"); }}class Service { private Helper helper = new Helper(); void accept(int data) { helper.process(data); }}public class Main { // 客戶端角色 public static void main(String[] args) { Service service = new Service(); for(int i = 0; i < 10; i++) { System.out.println("傳送資料"); service.accept(i); System.out.println("資料送出"); } }}
那麼客戶端每次都必須等Service元件處理完畢後,才可以進行下一次資料傳送,也就是Service對客戶端的回應性會很差。
您可以改用這樣的設計:
class Helper { void process(int data) { System.out.println("開始處理 " + data); try { Thread.sleep(3000); // 處理過程很費時 } catch(InterruptedException e) { e.printStackTrace(); } System.out.println("處理完成"); }}class Service { private Helper helper = new Helper(); void accept(final int data) { new Thread() {
public void run() {
helper.process(data);
}
}.start(); }}public class Main { public static void main(String[] args) { Service service = new Service(); for(int i = 0; i < 10; i++) { System.out.println("傳送資料"); service.accept(i); System.out.println("資料送出"); } }}
Service對於每個資料接收之後,馬上使用一個執行緒來處理,因此accept()方法會很快的返回,Service對於客戶端可以有很高的回應性。
以UML順序圖來表示以上範例的話:
Thread-Per-Message模式可應用在Service需要有高回應性的場合。服務端對每個請求使用一個執行緒來處理(從這些執行緒角度看,它們是 Worker Thread),如果服務端在乎建立新執行緒的負擔,則可以考慮結合使用Thread pool 模式。這個模式常用於多人網路連線程式,伺服端接受連線後,使用一個執行緒來處理該次連線,伺服端可馬上傾聽下一個客戶端連線。
使用Python來實現以上範例的話:
import _threadimport timeclass Helper: def process(self, data): print("開始處理 %d" % data) time.sleep(3) # 處理過程很費時 print("處理完成")class Service: def __init__(self): self.helper = Helper() def accept(self, data): _thread.start_new_thread(lambda: self.helper.process(data), ())service = Service()for i in range(10): print("傳送資料") service.accept(i) print("資料送出")
- Thread-Per-Message 模式
- Thread-Per-Message 模式
- Thread-Per-Message Pattern
- Thread-Per-Message Pattern
- Java多线程设计模式-学习笔记-Thread Per Message模式.
- java多线程设计模式之Thread-Per-Message模式
- 第七章 Thread-Per-Message
- Java线程之Thread-Per-Message Pattern
- Thread-Per-message Pattern--JAVA多线程编程模式(7)
- Java多线程设计模式详解学习笔记九——Thread-Per-Message
- Handler+Thread+Message模式 Android线程网络
- POSIX线程-Per-Thread Storage
- 多线程服务器模型-one loop per thread
- windows, thread ,message queue
- android thread Handler 、Looper、 Message、 Message Queue
- 命令模式下的异步消息处理(Handler,Message,Looper,Thread)
- 命令模式下的异步消息处理(Handler,Message,Looper,Thread)
- A Thread's Message Queue
- C#动态递归绑定TreeView(WinForm)
- 委托的定义和使用入门
- struts1问题
- Worker Thread 模式
- Thread pool模式
- Thread-Per-Message 模式
- rails3插件 will_paginate介绍
- Read-Write-Lock 模式
- SQL每月自然周(中国习惯)
- 实验3-1 赋值操作符
- 文本框输入技巧
- 实验3-2 算术操作符
- C#学习笔记(1):中断被Socket.Accept阻塞的线程
- 《C语言名题精选百则----9》