1. 程式人生 > >老闆叫你別阻塞了

老闆叫你別阻塞了

Java 多執行緒系列文章第 4 篇。

繼續咱們的 Java 多執行緒系列文章,今天再講講概念,這篇應該是最後一篇基礎概念,接下來就直接進入 Java 多執行緒主題了,在後面的文章裡如果有概念需要單獨拿出來講時再補充概念篇。

這篇文章主要講講阻塞(Blocking)和非阻塞(Non-blocking)。

上班後必學第一技能

以前在學校做專案,基本上都是獨立開發,每個人開發一個部分,以最小化溝通成本的方式劃分工作量。到了職場,單純的以最小化對接成本來安排工作是幾乎不可能的,要考慮的因素變多了,各種跨小組、跨部門、甚至跨職場的工作,這就帶來了溝通成本以及工作對接的各種阻塞問題。

新人剛入職場的時候,對一切都不熟悉,在做一些小組以外的對接工作時,就會遇到種種問題,特別現在充斥著各種分散式架構,以前開發 Web 後臺的同學要會開發 JSP 頁面,而現在前後端都分離了。設想一下這個場景。

小明是學習前端出身,剛開始步入職場,做的第一個需求就是登入和註冊介面,需要對接一個寫後臺的同事小東,小東負責開發登入和註冊的後臺邏輯。小明開發了登入介面,準備和小東對接聯調登入功能,這時小東回覆說他剛好有生產 bug 在跟進,還沒開發好,這時小明該怎麼做?

有 2 種做法:

  1. 乾等著小東開發好登入後臺,再和他聯調。

  2. 開發註冊介面,開發過程中再時刻詢問小東登入後臺介面是否做完了,如果小東做完了,再去對接。

這 2 種做法的關鍵區別是什麼呢?對於小東來說,沒啥區別,他能做的就是儘量早點實現他的功能點。主要關注小明,第一種做法,小明做好了登入介面,接著則等待小東的登入後臺介面,如果小東要開發一下午,那麼小明就一下午啥事也不幹,這種情況就是阻塞,小明的其他任務因為登入介面沒對接聯調,而一直阻塞著;第二種做法,小明得知小東登入後臺介面還沒實現,就著手先做註冊介面的功能,然後每過一個小時跟小東確認一下登入後臺介面開發是否開發完成,直到小東開發完登入後臺介面,便開始對接聯調,這種情況就是非阻塞,登入介面沒對接聯調完全不影響小明的開發進度,能聯調的時候就聯調,無法聯調就完成手頭上的其他任務。

可能有些同學初入職場會犯這類錯誤,做的功能依賴別人,因為別人還沒做完,然後就採用第一種做法,一直乾等著,直到對方完成後再繼續工作。偶爾偷偷懶還行,如果一直是這樣的工作狀態,對初入職場的同學沒有好處,而且這個被老闆知道很不好。如果某一個需求點阻塞了,應該就先做手頭上其他工作,如果手頭上沒其他工作,就跟老闆反饋情況後領其他任務做,還要時刻去跟進阻塞的需求點的進度。

下面用流程圖來描述這 2 個概念:

阻塞

非阻塞

看了上面的圖,是不是更加理解阻塞與非阻塞了呢?

老闆說了算

如果你是老闆,或者說是小明的領導,你會讓小明怎麼做?第一種做法還是第二種做法呢?有支援第一種做法的,麻煩聯絡我,你們公司還招人麼?

推薦閱讀

吃個快餐都能學到序列、並行、併發

泡一杯茶,學一學同異步

程序知多少?

設計模式看了又忘,忘了又看?

後臺回覆『設計模式』可以獲取《一故事一設計模式》電子書

覺得文章有用幫忙轉發&點贊,多謝朋友們!