為了測試多執行緒效率,我寫了一段貨物工人模型**,假如乙個卡車上有20件貨,每件貨有重量,1kg花費1s,2kg花費2s,以此類推,以此模型建立**如下:
# coding:utf-8
import threading
import time
from random import randint
# 貨物源
goods =
for n in range(20):
# 工人貨物模型
class mythread(threading.thread):
def __init__(self, thread_id, name):
threading.thread.__init__(self)
self.thread_id = thread_id
self.name = name
def run(self):
print self.name + '開始工作'
do_work(self.name)
print self.name + '完成工作'
# 處理貨物
def do_work(thread_name):
while len(goods) > 0:
if len(goods) > 0:
# 從搬運貨物的那一刻起貨物就已經不存在貨源了
wight = goods[0]
goods.remove(wight)
time.sleep(wight)
print thread_name + '花費了 ' + str(wight) + ' 秒'
# 工人
workers = ['張三']
threads =
thread_id = 0
first_time = time.time()
for worker in workers:
thread_id += 1
thread = mythread(thread_id, worker)
thread.start()
# 等待所有執行緒完成
for t in threads:
t.join()
last_time = time.time()
print "總耗時: " + str(last_time - first_time) + " 秒"
單工人工作效率:
張三開始工作
張三花費了 5 秒
張三花費了 3 秒
張三花費了 5 秒
張三花費了 4 秒
張三花費了 5 秒
張三花費了 1 秒
張三花費了 5 秒
張三花費了 4 秒
張三花費了 3 秒
張三花費了 3 秒
張三花費了 5 秒
張三花費了 3 秒
張三花費了 5 秒
張三花費了 5 秒
張三花費了 4 秒
張三花費了 4 秒
張三花費了 4 秒
張三花費了 1 秒
張三花費了 3 秒
張三花費了 2 秒
張三完成工作
總耗時: 74.0130000114 秒
改變工人數量增加到4個:
張三開始工作
李四開始工作
王五開始工作
趙六開始工作
張三花費了 1 秒 王五花費了 1 秒
李四花費了 2 秒
趙六花費了 2 秒
王五花費了 3 秒
李四花費了 3 秒
張三花費了 5 秒
趙六花費了 5 秒 李四花費了 2 秒
王五花費了 3 秒
趙六花費了 1 秒
張三花費了 3 秒
李四花費了 3 秒
趙六花費了 2 秒
張三花費了 2 秒
李四花費了 1 秒
王五花費了 5 秒
王五完成工作
趙六花費了 4 秒
趙六完成工作
張三花費了 5 秒
張三完成工作
李四花費了 5 秒
李四完成工作
總耗時: 16.004999876 秒
測試完成,效率槓槓的,當然可以考慮用這個模型來延申,比如工人成本,效率成本,這一批貨物該找多少工人更划算。 11執行緒 多執行緒模型
一 什麼是執行緒 為什麼要引入執行緒 二 引入執行緒機制後的變化 三 執行緒有的屬性 四 執行緒的實現方式 五 多執行緒模型 1 執行緒引入原因分析 2 執行緒 可以把執行緒理解為輕量級程序。執行緒是基本的cpu執行單元,也是程式執行流的最小單元。引入執行緒後不僅程序可以併發,程序內的執行緒也可以併...
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...
多執行緒程式設計模型
在學習muduo網路庫前,應該先熟悉一下多執行緒網路服務程式設計模型。在6.6.2節介紹了11種方案。方案0到方案4用的是阻塞i o。方案5到方案11用的都是非阻塞i o。方案0 accept read write 方案0不是併發模型,只是乙個迴圈處理。用 表示的話,可以表示為 while true...