關於多線程(進程)任務的思考

       本質上多線程和多進程的目的是提高CPU的利用率,壓縮CPU的空閒時間,當系統去做IO的時候CPU就會空閒,這時候如果有其他進程搶佔CPU則能將CPU利用起來,CPU調度的最小單位是線程。因此線程數或者進程數多,可以儘可能地利用多核CPU。

       最近的項目是要給訂閱了直播的用戶,推送微信模板消息,原來是單線程改多線程速度比較慢。於是我屁顛屁顛第在單機上將原來的單線程代碼改成了多線程,並起了10個線程。結果發佈到線上,線上偶爾總有一輛臺單機性能告警,CPU使用了100%,而此時其他服務器則相對正常,說明此時性能告警的機器正在執行推送任務。

這裏犯了兩個錯誤:第一沒有利用分佈式的環境。生產環境往往是分佈式的多臺機器,任務拆分應優先考慮將任務拆分到多臺機器上,這樣總體的機器利用率纔會高,而不會出現一方有難八方圍觀的局面。第二批跑任務應該和業務邏輯服務拆分部署,因爲批跑任務往往性能消耗較高的任務,對機器的讀寫都有挑戰,但用戶不感知對用戶體驗影響較小;業務邏輯服務的穩定決定了用戶是否能獲得服務,影響用戶體驗,最好將其拆分部署。

 

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