天天看點

關于多線程(程序)任務的思考

       本質上多線程和多程序的目的是提高CPU的使用率,壓縮CPU的空閑時間,當系統去做IO的時候CPU就會空閑,這時候如果有其他程序搶占CPU則能将CPU利用起來,CPU排程的最小機關是線程。是以線程數或者程序數多,可以盡可能地利用多核CPU。

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

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

繼續閱讀