电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

簡單了解Java Netty Reactor三種線程模型

瀏覽:109日期:2022-09-02 11:47:54

1. Reactor三種線程模型

1.1. 單線程模型

Reactor單線程模型,指的是所有的IO操作都在同一個NIO線程上面完成,NIO線程的職責如下:

1)作為NIO服務端,接收客戶端的TCP連接;2)作為NIO客戶端,向服務端發起TCP連接;3)讀取通信對端的請求或者應答消息;4)向通信對端發送消息請求或者應答消息。

Reactor單線程模型示意圖如下所示:

簡單了解Java Netty Reactor三種線程模型

Reactor單線程模型

由于Reactor模式使用的是異步非阻塞IO,所有的IO操作都不會導致阻塞,理論上一個線程可以獨立處理所有IO相關的操作。從架構層面看,一個NIO線程確實可以完成其承擔的職責。例如,通過Acceptor類接收客戶端的TCP連接請求消息,鏈路建立成功之后,通過Dispatch將對應的ByteBuffer派發到指定的Handler上進行消息解碼。用戶線程可以通過消息編碼通過NIO線程將消息發送給客戶端。

對于一些小容量應用場景,可以使用單線程模型。但是對于高負載、大并發的應用場景卻不合適,主要原因如下:1)一個NIO線程同時處理成百上千的鏈路,性能上無法支撐,即便NIO線程的CPU負荷達到100%,也無法滿足海量消息的編碼、解碼、讀取和發送;2)當NIO線程負載過重之后,處理速度將變慢,這會導致大量客戶端連接超時,超時之后往往會進行重發,這更加重了NIO線程的負載,最終會導致大量消息積壓和處理超時,成為系統的性能瓶頸;3)可靠性問題:一旦NIO線程意外跑飛,或者進入死循環,會導致整個系統通信模塊不可用,不能接收和處理外部消息,造成節點故障。

為了解決這些問題,演進出了Reactor多線程模型,如下。

1.2. 多線程模型

Rector多線程模型與單線程模型最大的區別就是有一組NIO線程處理IO操作,它的原理圖如下:

簡單了解Java Netty Reactor三種線程模型

Rector多線程模型

Reactor多線程模型的特點:

1)有專門一個NIO線程-Acceptor線程用于監聽服務端,接收客戶端的TCP連接請求;2)網絡IO操作-讀、寫等由一個NIO線程池負責,線程池可以采用標準的JDK線程池實現,它包含一個任務隊列和N個可用的線程,由這些NIO線程負責消息的讀取、解碼、編碼和發送;3)1個NIO線程可以同時處理N條鏈路,但是1個鏈路只對應1個NIO線程,防止發生并發操作問題。

在絕大多數場景下,Reactor多線程模型都可以滿足性能需求;但是,在極個別特殊場景中,一個NIO線程負責監聽和處理所有的客戶端連接可能會存在性能問題。例如并發百萬客戶端連接,或者服務端需要對客戶端握手進行安全認證,但是認證本身非常損耗性能。在這類場景下,單獨一個Acceptor線程可能會存在性能不足問題,為了解決性能問題,產生了第三種Reactor線程模型-主從Reactor多線程模型。

1.3. 主從多線程模型

主從Reactor線程模型的特點是:服務端用于接收客戶端連接的不再是個1個單獨的NIO線程,而是一個獨立的NIO線程池。Acceptor接收到客戶端TCP連接請求處理完成后(可能包含接入認證等),將新創建的SocketChannel注冊到IO線程池(sub reactor線程池)的某個IO線程上,由它負責SocketChannel的讀寫和編解碼工作。Acceptor線程池僅僅只用于客戶端的登陸、握手和安全認證,一旦鏈路建立成功,就將鏈路注冊到后端subReactor線程池的IO線程上,由IO線程負責后續的IO操作。

主從多線程模型如下圖所示:

簡單了解Java Netty Reactor三種線程模型

主從多線程模型

利用主從NIO線程模型,可以解決1個服務端監聽線程無法有效處理所有客戶端連接的性能不足問題。

它的工作流程總結如下:

1)從主線程池中隨機選擇一個Reactor線程作為Acceptor線程,用于綁定監聽端口,接收客戶端連接;Acceptor線程接收客戶端連接請求之后創建新的SocketChannel,將其注冊到主線程池的其它Reactor線程上,由其負責接入認證、IP黑白名單過濾、握手等操作;

2)步驟2完成之后,業務層的鏈路正式建立,將SocketChannel從主線程池的Reactor線程的多路復用器上摘除,重新注冊到Sub線程池的線程上,用于處理I/O的讀寫操作。

2. Netty線程模型

2.1. Netty線程模型分類

事實上,Netty的線程模型與1.2章節中介紹的三種Reactor線程模型相似,下面章節我們通過Netty服務端和客戶端的線程處理流程圖來介紹Netty的線程模型。

2.1.1. 服務端線程模型一種比較流行的做法是服務端監聽線程和IO線程分離,類似于Reactor的多線程模型,它的工作原理圖如下:

簡單了解Java Netty Reactor三種線程模型

2.1.2. 客戶端線程模型

相比于服務端,客戶端的線程模型簡單一些,它的工作原理如下:

簡單了解Java Netty Reactor三種線程模型

2.2. Reactor線程NioEventLoop

NioEventLoop是Netty的Reactor線程,它的職責如下:

作為服務端Acceptor線程,負責處理客戶端的請求接入; 作為客戶端Connecor線程,負責注冊監聽連接操作位,用于判斷異步連接結果; 作為IO線程,監聽網絡讀操作位,負責從SocketChannel中讀取報文; 作為IO線程,負責向SocketChannel寫入報文發送給對方,如果發生寫半包,會自動注冊監聽寫事件,用于后續繼續發送半包數據,直到數據全部發送完成; 作為定時任務線程,可以執行定時任務,例如鏈路空閑檢測和發送心跳消息等; 作為線程執行器可以執行普通的任務線程(Runnable)。

2.3. NioEventLoop設計原理

我們知道當系統在運行過程中,如果頻繁的進行線程上下文切換,會帶來額外的性能損耗。多線程并發執行某個業務流程,業務開發者還需要時刻對線程安全保持警惕,哪些數據可能會被并發修改,如何保護?這不僅降低了開發效率,也會帶來額外的性能損耗。

串行執行Handler鏈

為了解決上述問題,Netty采用了串行化設計理念,從消息的讀取、編碼以及后續Handler的執行,始終都由IO線程NioEventLoop負責,這就意外著整個流程不會進行線程上下文的切換,數據也不會面臨被并發修改的風險,對于用戶而言,甚至不需要了解Netty的線程細節,這確實是個非常好的設計理念,它的工作原理圖如下:

簡單了解Java Netty Reactor三種線程模型

一個NioEventLoop聚合了一個多路復用器Selector,因此可以處理成百上千的客戶端連接,Netty的處理策略是每當有一個新的客戶端接入,則從NioEventLoop線程組中順序獲取一個可用的NioEventLoop,當到達數組上限之后,重新返回到0,通過這種方式,可以基本保證各個NioEventLoop的負載均衡。一個客戶端連接只注冊到一個NioEventLoop上,這樣就避免了多個IO線程去并發操作它。

Netty通過串行化設計理念降低了用戶的開發難度,提升了處理性能。利用線程組實現了多個串行化線程水平并行執行,線程之間并沒有交集,這樣既可以充分利用多核提升并行處理能力,同時避免了線程上下文的切換和并發保護帶來的額外性能損耗。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | 广州云仓代发-昊哥云仓专业电商仓储托管外包代发货服务 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-沼河浸过滤器 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 噪声治理公司-噪音治理专业隔音降噪公司 | 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 步入式高低温测试箱|海向仪器 | 小程序开发公司-小程序制作-微信小程序开发-小程序定制-咏熠软件 | 网站建设-临朐爱采购-抖音运营-山东兆通网络科技 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 在线PH计-氧化锆分析仪-在线浊度仪-在线溶氧仪- 无锡朝达 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | 标准品网_标准品信息网_【中检计量】 | 电磁辐射仪-电磁辐射检测仪-pm2.5检测仪-多功能射线检测仪-上海何亦仪器仪表有限公司 | 青岛侦探调查_青岛侦探事务所_青岛调查事务所_青岛婚外情取证-青岛狄仁杰国际侦探公司 | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 办公室家具_板式办公家具定制厂家-FMARTS福玛仕办公家具 | 工业废水处理|污水处理厂|废水治理设备工程技术公司-苏州瑞美迪 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 电磁流量计厂家_涡街流量计厂家_热式气体流量计-青天伟业仪器仪表有限公司 | 收录网| 希望影视-高清影视vip热播电影电视剧免费在线抢先看 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 江门流水线|江门工作台|江门市伟涛行工业设备有限公司 | 北京印刷厂_北京印刷_北京印刷公司_北京印刷厂家_北京东爵盛世印刷有限公司 | 富森高压水枪-柴油驱动-养殖场高压清洗机-山东龙腾环保科技有限公司 | 郑州水质检测中心_井水检测_河南废气检测_河南中环嘉创检测 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | 英超直播_英超免费在线高清直播_英超视频在线观看无插件-24直播网 | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 济南网站建设|济南建网站|济南网站建设公司【济南腾飞网络】【荐】 | 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 | 开云(中国)Kaiyun·官方网站 - 登录入口 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 北京自然绿环境科技发展有限公司专业生产【洗车机_加油站洗车机-全自动洗车机】 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 |