<source : greatway9999>

Queue

(一)、Obtain Queue

Queue類似件包裹功能。特性如下 :

  • 具有一對一特性。
  • 可命名,易複製。
  • 可跨程式傳遞資料。
  • 有緩衝空間。
  • 不容易掉資料,也不會重複取得資料。


使用關鍵 : 

  • max queue size,向電腦要最大的記憶體空間。(避免執行過程中記憶體爆掉)
  • name : 要取名,若無特殊用途(Obtain Queue如果再新增一個,取同樣名字,會開一個新通道,目的在節省接線,下面有相關範例),最好不要重複。
  • element data type : 告訴電腦要什麼樣資料型態的記憶體位置 (也就是要多大)。
  • 資料先進先出(FIFO),所以資料會一直往後面塞。


(二)、Enqueue Element


Enqueue Element彷彿是郵局,接收 Obtain Queue送來的資料,再發出去。

使用關鍵 :

  • queue out : 傳記憶體位置。舉例,今天買了一棟房子,獲得地址,邀請友人來,就要告訴對方地址。
  • timeout : 若對obtian queue有設定尺寸,建議在timeout設定時間,確保程式不會卡住。沒有設定 (預設) 為無限久。


通道用完一定要關掉。


(三)、Enqueue Element At Opposite End

用法類似唱TV時的插播。插入的資料會放到第一筆。



(四)、Lossy Enqueue Element

Lossy Enqueue : 依照FIFO原則,將第一筆資料先丟掉,再最後方塞入指定資料,保證空間中的資料是最新。舉例來說,就好像是球隊要簽下明星球員(最新資料),但因為位置有限,只好揮棄一位球員(最舊資料)。


(五)、Dequeue Element

接收queue 的資料。

使用關鍵 :

  • timeout : 看狀況設定。沒有設定 (預設) 為無限久。


(六)、Preview Queue Element


用法看一眼最前面的資料是什麼,但不會拿走。和Dequeue不一樣。


(七)、Get Queue Status

查看queue中的資料狀態,有多少還沒被拿走。


(八)、Release Queue 

釋放queue記憶體空間,把記憶體空間還給電腦。就好像把垃圾車賣掉,就沒有垃圾車可使用。

通道用完一定要關掉。force destroy要接True,把所有通道關掉,以利把空間還給電腦。

(九)、Flush Queue 

清掉記憶體空間的內容,但空間仍在,仍可繼續使用。就好像垃圾車把垃圾倒到焚化爐,但車仍在,可繼續使用。


(十)、Queue實作範例



Obtain Queue省線接法


Notifier (類似廣播)

特性如下 :

  • 具有一對多和多對多特性。
  • 可命名,易複製。
  • 沒有緩衝空間,有可能掉資料。
  • 不保證對方會收到資料。適用於不重要的資料傳輸。
  • 用法和queue一樣,但不用設定大小。
  • 沒有timeout。


(一)、Cancel Notification

就好像line將訊息收回,但是已看到訊息的對象,無法清除記憶。

用途 : 若資料有時效性,就會用到。




(二)、Get Notifier Status

回報現在有多少地方在等待通知,簡言之就是現在有多少人在等待我(發送資料的程式)通知。



範例 :


Semaphore (紅綠燈)

用於動作互卡。我走完,再換你走。

使用關鍵 :

  • 可以取名字 (代表可以省線,參考queue做法)
  • size : 設定取決於有幾個迴圈的資料。


實作範例 :

從實作範例中可看到,上面迴圈執行完後,下面迴圈才會接著執行。


Rendezvous (匯合)

同步不同速度的迴圈。

直白地說,多個程式要一起跑完,才能再跑第二圈。也就是說執行快的迴圈要等待執行慢的迴圈,2個迴圈都執行完第一圈,才能執行第二圈。

使用關鍵 :

  • name : 命名,省線用途。
  • size : 要等待的迴圈數量。

範例 :


Occurence

作為簡易訊號傳送使用,用於只觸發事件,而不傳遞資料。可想像成不能傳遞資料的Notifier。


範例 :

當上面的迴圈中數字整除,觸發下迴圈計數。



First Call


只會呼叫1次,執行其他次數都是False。可作為一次性信號使用。若作為子程式使用,仍只會運作一次。

範例 :



將上述程式轉成子程式,再寫一隻程式進行測試。你會發現,數字更新一次後就歸零。驗證了,呼叫第一次為 True,其餘次數為False。


---

#Queue #Notifier #Semaphore #Rendezvous #First_Call #Occurence

0 留言