blocking,幾乎大家用的都是這一種,把事情做完他才會return。以malloc為例,除非作業系統發生很奇怪的事情,否則即使系統的記憶體不足,他也會暫停應用程式(blocking)直到系統有充足的記憶體,並且回傳記憶體的指標
non-blocking,假如作業系統的資源不夠多,或者該資源暫時無法使用,會立即回傳。錯誤代碼可能會是BUSY之類的。以malloc為例,如果作業系統的記憶體不足,應用程式回馬上拿到空指標,然後errno的值可能為「目前記憶體不足,請稍後再試」
asynchronous,對作業系統發出指令後,基本上就是射後不管(很像是飛彈)。再以malloc為例,假設maloc的參數為 void malloc(void* ret_addr, size_t size);
第二個參數是需要的記憶體的多寡,拿到記憶體後,記憶體的位址會填寫在ret_addr
這個函數執行以後,會立即return,作業系統「可以稍後再將記憶體位址填入ret_addr」
asyn. i/o 通常用在需要非常密集的發出大量的i/o,很像是網路,client一次向server發出100個request,發完request以後,應用程式就可以等待server將100個response都回傳,這樣可以讓server與client的頻寬增加
明天上課我還會再口頭解釋,網路上不見得會用標準術語,例如non-blocking和async. 這二個字常常用錯。要看一下前後文才會知道真正的意思