老闆叫你別阻塞了

Java 多線程系列文章第 4 篇。

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

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

上班後必學第一技能

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

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

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

有 2 種做法:

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

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

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

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

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

阻塞

阻塞

非阻塞

非阻塞

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

老闆說了算

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

推薦閱讀

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

泡一杯茶,學一學同異步

進程知多少?

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

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

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

LieBrother

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章