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


1
1
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 60Redis 數據結構中不保留任何內容,那麼到底是誰給予他buffer呢?
想像一下一個producer,對上多個不同速度的consumer

Nsq

class4-02
Question?

講完了!
謝謝大家



Queue 應用與實做
By Shen Hoh
Queue 應用與實做
- 129