生產消費模型 多生產者vs多消費者

2021-08-06 01:59:11 字數 1511 閱讀 8700

使用場景:

遊戲中多個玩家生產任務,伺服器多執行緒處理任務, netty工作執行緒收到客戶端傳來資料,生成任務後,加入到任務佇列中;

public abstract class basetask

任務管理器

public class mutitaskmanager 

private final static mutitaskmanager instance = new mutitaskmanager();

public static mutitaskmanager getinstance()

//執行緒池

private executorservice executor = null;

//任務佇列

private volatile queuetaskqueue = new linkedlist();

//執行緒物件列表

private listtaskexecutors;

//執行緒數量

private int threadnum;

private volatile object signal = new object();

/*** 初始化執行緒列表

* @param threadcnt

*/public void init(int threadcnt) }

/*** 新增任務

* @param task

*/public void addtask(basetask task) }

/*** 取出任務

* @return

*/public basetask poptask()

public int gettasksize()

/*** 開啟服務,啟動執行緒池

*/public void startservice() }

public void stopservice() throws exception

this.executor.shutdown();

}}

消費者

/**

* 任務執行者

* @author skymr

* */

public class mutitaskexecutor implements runnable

@override

public void run() catch (interruptedexception e)

task = mutitaskmanager.getinstance().poptask();}}

if (task != null) catch(exception e)

}} }

public void stopwork()

}

訊息者的任務是乙個無限迴圈中,判斷是否有新任務加入,如果有,執行任務,消費;如果沒有則進入等待(signal.wait()),直到接收到任務通知。

單生產者 多消費者模型

問題出處 生產者消費者問題 有乙個生產者在生產產品,這些產品將提供給若干個消費者去消費,為了使生產者和消費者能併發執行,在兩者之間設定乙個有多個緩衝區的緩衝池,生產者將它生產的產品放入乙個緩衝區中,消費者可以從緩衝區中取走產品進行消費,所有生產者和消費者都是非同步方式執行的,但它們必須保持同步,即不...

python queue 多生產者,多消費者

專案需求是從快 爬取ip,運用到專案中,設定佇列的大小,當有ip被消耗時,就新增新的ip到佇列中,獲取ip的頁面是不斷重新整理的。總的來說,就是一方不斷把爬取ip存到佇列中,一方不斷從佇列中取ip,消耗ip,此處爬取的是快 首先建立乙個佇列 from queue import queue q que...

生產者消費者模型二(單 多模型)

生產者 消費者問題 producer consumer 又名 有界緩衝區 bounded buffer 問題 單生產者 多消費者 設計要點 當緩衝區滿已滿,而此時生產者還想向緩衝區中放入乙個新的資料項時。則讓生產者睡眠,待消費者從緩衝區中取出乙個或多個資料項時再喚醒生產者。同樣的,當緩衝區滿已空,而...