老闆叫你別阻塞了
Java 多執行緒系列文章第 4 篇。
繼續咱們的 Java 多執行緒系列文章,今天再講講概念,這篇應該是最後一篇基礎概念,接下來就直接進入 Java 多執行緒主題了,在後面的文章裡如果有概念需要單獨拿出來講時再補充概念篇。
這篇文章主要講講阻塞(Blocking)和非阻塞(Non-blocking)。
上班後必學第一技能
以前在學校做專案,基本上都是獨立開發,每個人開發一個部分,以最小化溝通成本的方式劃分工作量。到了職場,單純的以最小化對接成本來安排工作是幾乎不可能的,要考慮的因素變多了,各種跨小組、跨部門、甚至跨職場的工作,這就帶來了溝通成本以及工作對接的各種阻塞問題。
新人剛入職場的時候,對一切都不熟悉,在做一些小組以外的對接工作時,就會遇到種種問題,特別現在充斥著各種分散式架構,以前開發 Web 後臺的同學要會開發 JSP 頁面,而現在前後端都分離了。設想一下這個場景。
小明是學習前端出身,剛開始步入職場,做的第一個需求就是登入和註冊介面,需要對接一個寫後臺的同事小東,小東負責開發登入和註冊的後臺邏輯。小明開發了登入介面,準備和小東對接聯調登入功能,這時小東回覆說他剛好有生產 bug 在跟進,還沒開發好,這時小明該怎麼做?
有 2 種做法:
乾等著小東開發好登入後臺,再和他聯調。
開發註冊介面,開發過程中再時刻詢問小東登入後臺介面是否做完了,如果小東做完了,再去對接。
這 2 種做法的關鍵區別是什麼呢?對於小東來說,沒啥區別,他能做的就是儘量早點實現他的功能點。主要關注小明,第一種做法,小明做好了登入介面,接著則等待小東的登入後臺介面,如果小東要開發一下午,那麼小明就一下午啥事也不幹,這種情況就是阻塞,小明的其他任務因為登入介面沒對接聯調,而一直阻塞著;第二種做法,小明得知小東登入後臺介面還沒實現,就著手先做註冊介面的功能,然後每過一個小時跟小東確認一下登入後臺介面開發是否開發完成,直到小東開發完登入後臺介面,便開始對接聯調,這種情況就是非阻塞,登入介面沒對接聯調完全不影響小明的開發進度,能聯調的時候就聯調,無法聯調就完成手頭上的其他任務。
可能有些同學初入職場會犯這類錯誤,做的功能依賴別人,因為別人還沒做完,然後就採用第一種做法,一直乾等著,直到對方完成後再繼續工作。偶爾偷偷懶還行,如果一直是這樣的工作狀態,對初入職場的同學沒有好處,而且這個被老闆知道很不好。如果某一個需求點阻塞了,應該就先做手頭上其他工作,如果手頭上沒其他工作,就跟老闆反饋情況後領其他任務做,還要時刻去跟進阻塞的需求點的進度。
下面用流程圖來描述這 2 個概念:
阻塞
非阻塞
看了上面的圖,是不是更加理解阻塞與非阻塞了呢?
老闆說了算
如果你是老闆,或者說是小明的領導,你會讓小明怎麼做?第一種做法還是第二種做法呢?有支援第一種做法的,麻煩聯絡我,你們公司還招人麼?
推薦閱讀
吃個快餐都能學到序列、並行、併發
泡一杯茶,學一學同異步
程序知多少?
設計模式看了又忘,忘了又看?
後臺回覆『設計模式』可以獲取《一故事一設計模式》電子書
覺得文章有用幫忙轉發&點贊,多謝朋友們!