日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

并发200_一种单机支持 JavaWeb 容器万级并发的设想

發(fā)布時(shí)間:2025/3/15 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并发200_一种单机支持 JavaWeb 容器万级并发的设想 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
作者:莫那魯?shù)梨溄?#xff1a;https://www.cnblogs.com/stateis0/p/10963171.html

當(dāng)前的大部分 Java web 容器基于 Bio 線程模型,例如常見的 Tomcat ,默認(rèn) 200 線程,即 200 連接。由此帶來的問題是,如果想提高并發(fā),或者提高資源利用率,就得加大線程數(shù)。

如下圖:

于是出現(xiàn)了類 Netty 的 Reactor 線程模型。同時(shí),Java 官方也設(shè)計(jì)了 Servlet 3 異步 API,可以通過返回類 Feature 的方式,實(shí)現(xiàn)異步編程。在某些情況下,也可以實(shí)現(xiàn)萬級別并發(fā)。

但是,為什么 Java 社區(qū)的異步編程無法推廣開來?究其原因,數(shù)據(jù)庫是罪魁禍?zhǔn)?#xff0c;再往上看,其實(shí)是 JDBC 的鍋,JDBC 定義了一套阻塞式的數(shù)據(jù)庫 IO 通信模型。這導(dǎo)致每次請求,線程都阻塞在等待 DB 結(jié)果。進(jìn)而導(dǎo)致,服務(wù)器資源無法充分利用。

有沒有一種辦法,讓 Java web 應(yīng)用的整個(gè)鏈路都是非阻塞的呢?

答:有。

異步編程是提高生產(chǎn)力的關(guān)鍵。下圖是我們今天假設(shè)的模型:

其實(shí)非常簡單。

我們讓 Tomcat 支持 Servlet 3 異步編程模型,接口返回 feature 即可,這個(gè)功能其實(shí)有很多web 容器都實(shí)現(xiàn)了。關(guān)鍵的是,我們讓 DB 客戶端和服務(wù)器都支持異步編程模型。讓 DB 像 netty 復(fù)用 IO 連接,業(yè)務(wù)線程只需要將 SQL 交給數(shù)據(jù)庫 client 即可返回 feature,然后釋放當(dāng)前線程(再也不用阻塞,這是關(guān)鍵),等 DB 操作結(jié)果返回時(shí),只需通知這個(gè) feature 即可。這將極大的提高線程的利用率,不夸張的說,只需 8 條線程,就足以承受萬級別的并發(fā)。

整個(gè)的調(diào)用流程如下圖:

我們看到,當(dāng)一個(gè) http 請求過來,整個(gè)流程是無阻塞的,不用等待 數(shù)據(jù)庫 返回結(jié)果,業(yè)務(wù)只需添加回調(diào)即可,當(dāng)數(shù)據(jù)庫結(jié)果返回時(shí),自動(dòng)觸發(fā)回調(diào)。

當(dāng)然,這只是我的一個(gè)小設(shè)想,Mysql 要重寫連接器,我估計(jì)是太難了。但是,那些新一代的數(shù)據(jù)庫,是否能夠把連接器設(shè)計(jì)成支持異步、支持多路復(fù)用的呢?這樣,web 應(yīng)用的客戶端,就能夠把整個(gè)鏈路設(shè)計(jì)成異步的,這將節(jié)約很多資源,提高生產(chǎn)力。

希望那一天快點(diǎn)到來。

總結(jié)

以上是生活随笔為你收集整理的并发200_一种单机支持 JavaWeb 容器万级并发的设想的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。