Queue 應用與實做

by: hohshen

Why we need queue?

先假設這世界上沒有Queue
            這樣的話,就是比誰最快抵達

這裡要考量一個問題

我們一般的電腦是Time-sharing system

 

 

 

 

 

 

 

 

 

 

class1-01

這時想起了....

解決Race Condition Problem

class1-02

人生就是一個

starvation problem

930

class1-03

感動到流淚啊!

why queue need buffer?

How much buffer we need?

先假設沒有buffer

我準備好了>///<

丟了~

class2-01

class2-02

有buffer的queue

 

 

 

    今晚,我想來點....
    無限buffer的queue

 

 

 

不限制buffer limit真的好嗎?

來計算一下怎麼排隊

顧客抵達的時間間隔為T,

成指數分布(Exponential distribution)

 

在t時間內客戶相繼抵達的機率為該分布的CDF,

即 P(T ≤ t) = 1 – e^(-λt)

 

有了這些資訊,我們就可以嘗試模擬出一個排隊模型,
算出平均等待時間,每個顧客前面平均要等多少人(class2-03Q)
先製造一個Exponential distribution CDF(class2-03)

製作一個Exponential distribution CDF 

已知F(x)=1 – e^(-λt)

F(F'(u))=u

1-e^(-λ*F'(u))=u

e^(-λ*F^(u))=1-u

-λ*F^(u)=ln(1-u)

F^(u)=(-1/λ)*ln(1-u)

我們可以利用亂數生產(0~1)許多個符合uniform distribution的機率值

但目前法直接生產許多符合Exponential distribution的機率值,所以要先製造一個符合Exponential distribution的生產器,

讓我們丟一個機率,輸出一個x (本來是f(x)=y  => g(y)=x)

(class2-03)

利用Exponential distribution CDF 模擬排隊

(class2-03Q)

在此會發現 λT 會將近於 N,但超過 1 之後就又會開始不同

無限Buffer的Queue?

有限buffer的queue

class2-04

Redis-based queue for Node.

class2-05

pritity queue (schedule)

只會FIFO......QAQ

heap tree

class3-01

Multi-queue

class3-02

heap tree v.s. Multi-queue

 

 

 

 

 

 

 

 

Message Queue

Why we need message queue?

It is a queue?

How much buffer in this queue

class4-01

It is a queue?

redis並不會真的幫你排隊,

只是預設讓發送予接受在同一個connection

維持一至性

若不需要關心每個訊息的處理順序,

可以調整redis.PreserveAsyncOrder = false

讓PublishAsync()發揮非同步的能力

How much buffer in this queue?

Output buffer Hard limit/Soft limit

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

Redis 數據結構中不保留任何內容,那麼到底是誰給予他buffer呢?

想像一下一個producer,對上多個不同速度的consumer

Nsq

class4-02

Question?

講完了!

謝謝大家

Queue 應用與實做

By Shen Hoh

Queue 應用與實做

  • 129