發表文章

目前顯示的是 10月, 2018的文章

[Program Note] Asynchronous Programing與Callback Function

圖片
Asynchronous Programing 一開始要先清楚何謂同步與非同步,同步比較簡單,就像是我們去銀行辦事情,你填好單子交給行員,之後你必須在行員的櫃台一直等他完成作業,無論是開戶、領款、或者存款,這樣就是同步作業;你的程式送出request之後必須一直等待到response,才可以做其他事情。 而非同步作業時常與多執行緒作業畫上等號,實際上是不同的,多執行緒就像是有六十個人要在銀行開戶,所以銀行開了10個櫃台來處理這60個作業,但是每個櫃台實際上還是執行著上面說的同步作業。 而非同步作業是你今天要開戶,填好單子給行員之後,你可以去隔壁買飲料,點完飲料你可以去隔壁買衣服,店員幫你包裝衣服的時候你可以去7-11繳個電話費,然後飲料店叫到你的號碼了你回去拿飲料,服飾店員說你的衣服包好了你回去拿衣服,最後回到銀行剛好叫到你的號碼再去櫃檯拿你的存摺;對於程式而言, 你的程式送出request之後,到收到response之間,程式可以去做其他事情。 當瞭解同步與非同步作業之後,會延伸一個問題,你要對誰送出的request跟誰會送給你response?對於這個程式角色他必須有一個特性,它必須一直都存在,當你送出一個request之後,它會接收、處理,然後回覆給你一個response,當你再次送出一個request的時候,它也會重複同樣的程序,就像一個等待你的request的迴圈一樣;這樣的設計模式(Design Pattern)有個名字叫反應堆模式(Reactor Pattern),或者叫事件迴圈(Event Loop)、 Select迴圈(Select Loop) 。 下面這張圖就說明了反應堆迴圈的執行方式-等待事件、處理事件的無限迴圈;這個反應堆在程式執行期間會一直存在著,你給他一個request,就是一個event,它會處理完,給你response,然後繼續安靜的等待下一個request。 Callback Function 接著說明一下callback function,在一般的程式中,你寫了一個function,然後你在程式碼中呼叫這個function,我們可以稱為「call」一個function;如果你寫了一個function,然後把這個function的指給了某一個套件、框架、或者其他的程式,這個function在合適的時間,會由這些套