【練技術】如何通過精研線程模型,cpu調度,內存模型等性能優化核心?

性能優化無非就是線程,cpu調度,以及內存之間的配合,這三者中任何一個達到極限,都會造成系統整體性能下降,甚至癱瘓。

線程必然要由cpu調度才能活動起來,那麼線程的活動也必須有自己的地盤,那麼這個地盤就是內存區域。線程數越多,需要cpu的調度能力越強,需要的內存也就越大,那麼線程不可能無限增大,總有個極限,當到達極限之後,系統性能將呈現拋物線形的狀態急轉往下。

所以我們必須不能讓cpu等資源達到這個極限值,一般在85%左右就可以了。intel的工程師曾今說過,我們爲什麼要讓cpu達到100%的性能呢,能夠讓他發揮到80%-85%就已經很完美了。

那麼線程模型也是掣肘性能的一個重要因素,NIO優於BIO,reactor模型又是NIO模型的最佳實踐,proactor模型又優於reactor模型。這些線程模型都是值得我們去深入研究的。

每種線程模型都有實際的產品落地,比如早期的tomcat就是BIO模型的,後來NIO起來之後,netty,redis等都基於reactor實現了相對不錯的性能。proactor模式又落地到tomcat的NIO2通道中。這些都是優秀的線程模型的實現案例。

java領域裏面,內存模型的研究的終極目標是如何更有效率的回收垃圾,從jdk迭代的版本我們可以看出jvm工程師在這方面的努力,在【jvm調優-GC篇】裏我們着重講了各種垃圾收集算法以及產品的落地,從最初的串行垃圾收集器到當前性能最好的G1垃圾收集器,這些都凝聚jvm工程師的心血。

在內存領域,各路大牛可謂都是絞盡腦汁的琢磨各種方案,也取得了一些成效,比如“零拷貝”,這個技術用在各大組件中,nginx,netty,kafka等組件裏都有他的影子。他的理念就是乾脆跨過堆內存,直接走內核,這樣就沒gc啥事了。

所以我們調優要做到心中有數,你究竟要調什麼?究竟是線程模型呢,還是cpu調度呢,還是內存gc回收呢?針對不同的部分都有成熟的方案可選,不要盲目的去調優。

更多調優研習參考:https://docs.qq.com/doc/DQnVueFhibEF4eEha

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