乙個有關定時生產與消費的問題

2021-08-15 02:37:50 字數 549 閱讀 3001

本文來講解遇到的乙個有意思的與定時器相關的生產消費模型,模型如下圖:

問題:每個佇列裡面最多時候會有幾個元素?

按照上面的邏輯看的話,每個佇列裡面最多有乙個元素。其實不然,因為在多執行緒模型中每個執行緒占用cpu執行的時間是按照時間片來劃分的,每個執行緒執行完自己的時間片後會被掛起,然後下乙個獲取到時間片的執行緒會占用cpu執行自己的任務,當下一輪被掛起的執行緒獲取到自己的時間片後,會恢復執行上下文從之前被掛起的地方執行。

所以這裡步驟(6)並不能保證比步驟(5)先執行,有可能消費執行緒在執行步驟(5)前時間片用完了,則這時候消費執行緒會被掛起,而如果現在生產者執行緒獲取到了cpu並且到達了定時執行任務的時間點,則步驟(6)會執行,那麼這時候佇列一,裡面會有2個元素,那麼等消費執行緒獲取cpu時間片執行時候會從佇列1裡面拿到2個元素。

注:這裡使用1.000000000001s是為了說明和1s比較接近,其實由於影響排程因素很多,有可能有比這更接近1s的時間

乙個生產 消費者問題

這幾天在寫乙個小工具,其核心就是乙個生產消費者問題 1.單個生產者生產資料d 2.多個一級消費者併發消費資料d,得到d 3.單個二級消費者消費d 此處有一額外限定 d 不能立即被消費,必須在一定延時之後才能被消費 4.資料是有限的,資料被消費完畢之後,程式必須停止 我的思考過程如下 1.不考慮二級消...

乙個生產者和乙個消費者

我想開發乙個可以允許最多有3個物品的 生產者 消費者 例子 說明的是生產者,消費者都只有乙個 1。代表商店店員 public class clerk catch interruptedexception e this.product system.out.printf 現在共有商品 d n個 thi...

乙個生產問題引發的思考

前言 最近碰到乙個生產問題,整個處理過程讓我不禁想起幾年前碰到的乙個類似情景,但是結果卻完全不一樣。兩次問題說大不大,說小不小。這次由於我們處理及時,大事化小小事化了而已,然而幾年前的那次事件,卻由於多方原因,鬧得挺大,驚動了某會。由此引發的一些思考和總結吧。問題回顧 排查思路 生產出現這種效能問題...