web服務的併發技術以及解決方案

一個百萬級用戶的系統的web服務必須通過特殊的技術處理才能滿足需求。

一個關鍵的詞彙叫做“併發”,這樣可以非阻塞的同時處理多個用戶請求。對於初級處理這種多用戶請求的程序員最先用到的方法就是來一個請求,開一個線程,處理完之後銷燬現成。的確這種做法可以處理類似與同時爲多用戶提供服務的需求,但是這種做法的效率太低了。原因是新開一個線程需要去請求系統資源,處理完業務之後釋放線程又需要很多時間,這樣一來很可能時間大部分浪費到了非業務處理的部分。在這種情況下,出現了“池”的概念。可以預先開一些數量的線程放到池裏,用的時候直接去池裏取就可以了,用完了 也不用釋放放回池裏供其他請求繼續使用。這種方式解決了上一做法的效率問題。那麼,應該開多少線程放進去呢?簡單來說,根據需求動態調整池中的線程數量是最合理的。具體策略就不再贅述。

“線程池”解決了多用戶處理的問題,然而對於web請求來說,效率的瓶頸不在於cpu的處理速度。相信學過《計算機組成原理》的同學,對於以下的倒三角形一定有印象。


cpu的梳理速度是一級緩存的數倍,二級緩存的數十倍,內存的數百倍,硬盤的數千萬倍,網絡IO的數億。

於是就產生一個問題叫做NIO問題,而處理這個問題有效的方法也就是非阻塞是IO。下面介紹一些此方面的技術。


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