0 背景 這是一篇用來發泄情緒的文章,被一個愚蠢的問題折騰了好久。 不想看背景的可直接閲讀 1 問題 章節,或 2.3 演示。 情況是這樣的,最近接手了一個 Windows 的 Golang 項目,它是一個多節點運行的服務。由於公司信息安全的特殊規定,我們必須將編譯後的程序放到固定的遠程虛擬機中運行測試,而不能在我們的本機上調試。有過經歷的讀者們可能知道,公司的那種虛擬機吧,無法連外網,且環境非常
這篇文章我們來聊一個很簡單,但是很多人往往分不清的一個問題,同步異步、阻塞非阻塞到底怎麼區分? 開篇先問大家一個問題:IO多路複用是同步IO還是異步IO? 先思考一下,再繼續往下讀。 鉅著《Unix網絡編程》將IO模型劃分為5種,分別是 阻塞IO 非阻塞IO IO複用 信號驅動IO 異步IO 個人認為這麼分類並不是很好,因為從字面上理解阻塞IO和非阻塞IO就已經是數學意義上的全集了
阻塞和非阻塞 阻塞的時候線程會被掛起 阻塞: 當數據還沒準備好時,調用了阻塞的方法,則線程會被掛起,會讓出CPU時間片,此時是無法處理過來的請求,需要等待其他線程來進行喚醒,該線程才能進行後續操作或者處理其他請求。 非阻塞: 意味着,當數據還沒準備好的時候,即便我調用了阻塞方法,該線程也不會被掛起,後續的請求也能夠被處理。 同步 同步和異步跟串行和並行非常形似。 假設在一個場景下:完成一個大任務需