日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

聊聊項(xiàng)目實(shí)戰(zhàn)中的異步設(shè)計(jì)

來(lái)源: 責(zé)編: 時(shí)間:2024-02-01 12:49:05 270觀看
導(dǎo)讀場(chǎng)景切入??先來(lái)看一個(gè)日常生活快遞寄件場(chǎng)景,從寄件人(寄件)到收件人(收件),全流程如下:圖片當(dāng)你準(zhǔn)備寄送一個(gè)包裹時(shí),通常你可以有兩種寄件方式:??方案一、你親自前往快遞服務(wù)點(diǎn),填寫寄件單、交付包裹、等待工作人員處理,最后

場(chǎng)景切入

??先來(lái)看一個(gè)日常生活快遞寄件場(chǎng)景,從寄件人(寄件)到收件人(收件),全流程如下:jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)你準(zhǔn)備寄送一個(gè)包裹時(shí),通常你可以有兩種寄件方式:jVi28資訊網(wǎng)——每日最新資訊28at.com

??方案一、你親自前往快遞服務(wù)點(diǎn),填寫寄件單、交付包裹、等待工作人員處理,最后得到一張寄送單據(jù)。你必須在服務(wù)點(diǎn)等待直到所有步驟都完成。這個(gè)過(guò)程是同步的。jVi28資訊網(wǎng)——每日最新資訊28at.com

??方案二、你可以選擇在線預(yù)約快遞上門取件服務(wù),填寫相關(guān)信息后,你的請(qǐng)求就被提交給系統(tǒng)。此時(shí),你可以繼續(xù)進(jìn)行其他事情,而不需要等待快遞員到達(dá)。系統(tǒng)會(huì)在后臺(tái)異步處理你的請(qǐng)求,安排合適的快遞員前來(lái)取件。這樣,你就可以在等待的過(guò)程中做其他事情,無(wú)需阻塞在快遞服務(wù)點(diǎn)。jVi28資訊網(wǎng)——每日最新資訊28at.com

??這種寄件方式提高了效率,讓用戶可以更加靈活地安排自己的時(shí)間。在后臺(tái)系統(tǒng)中,快遞公司可以通過(guò)合理的任務(wù)調(diào)度,處理多個(gè)異步請(qǐng)求,提高寄件服務(wù)的整體吞吐量。這種方式類似于在后端異步處理任務(wù),而用戶無(wú)需等待任務(wù)完成,可以繼續(xù)進(jìn)行其他操作,提高了整個(gè)寄件過(guò)程的并發(fā)性和響應(yīng)性。這個(gè)過(guò)程就是異步。jVi28資訊網(wǎng)——每日最新資訊28at.com

同步和異步

我們通過(guò)這個(gè)例子抽象出同步模型和異步模型:jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

小結(jié)

同步模型:一個(gè)任務(wù)做完做下一個(gè)任務(wù),阻塞jVi28資訊網(wǎng)——每日最新資訊28at.com

異步模型:做當(dāng)前任務(wù),只需要開啟而不需要關(guān)心另一個(gè)任務(wù)如何執(zhí)行,非阻塞jVi28資訊網(wǎng)——每日最新資訊28at.com

設(shè)計(jì)理念

??有了上邊的模型,對(duì)于同步和異步的概念就有了初步的認(rèn)識(shí)。事實(shí)上,在架構(gòu)設(shè)計(jì)中,異步思想是指通過(guò)異步處理來(lái)提高系統(tǒng)的性能、可伸縮性和響應(yīng)速度。jVi28資訊網(wǎng)——每日最新資訊28at.com

以下是SpringColud微服務(wù)架構(gòu)的基本套件:jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

在架構(gòu)設(shè)計(jì)中,異步思想可以應(yīng)用在多個(gè)方面。常見(jiàn)的異步實(shí)踐包括:jVi28資訊網(wǎng)——每日最新資訊28at.com

  1. 消息隊(duì)列:通過(guò)消息隊(duì)列實(shí)現(xiàn)異步通信,將消息發(fā)送到隊(duì)列中,然后由消費(fèi)者異步地處理這些消息。這種方式可以實(shí)現(xiàn)解耦和削峰填谷的效果。
  2. 事件驅(qū)動(dòng):系統(tǒng)中的各個(gè)組件通過(guò)事件進(jìn)行通信,當(dāng)事件發(fā)生時(shí),系統(tǒng)中的其他組件可以異步地響應(yīng)這些事件,從而實(shí)現(xiàn)松耦合和高內(nèi)聚。
  3. 非阻塞I/O:在網(wǎng)絡(luò)編程中,采用非阻塞I/O可以使系統(tǒng)在等待I/O操作完成的同時(shí)繼續(xù)處理其他任務(wù),提高系統(tǒng)的并發(fā)能力和吞吐量。

......jVi28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景應(yīng)用

??接下來(lái),我們針對(duì)實(shí)際項(xiàng)目中的異步設(shè)計(jì)逐個(gè)探究??赡茏霾坏矫婷婢愕?,但是可以為真實(shí)的場(chǎng)景中的方案設(shè)計(jì)打開思路。jVi28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景一、基于異步非阻塞模型的業(yè)務(wù)網(wǎng)關(guān)Spring Cloud Gateway

??Spring Cloud Gateway基于Project Reactor反應(yīng)式編程和WebFlux框架,通過(guò)路由、過(guò)濾器、事件等機(jī)制實(shí)現(xiàn)了靈活的網(wǎng)關(guān)服務(wù)。它適用于構(gòu)建微服務(wù)架構(gòu)中的業(yè)務(wù)網(wǎng)關(guān),具有高性能、可擴(kuò)展性和豐富的功能。jVi28資訊網(wǎng)——每日最新資訊28at.com

官網(wǎng)地址:https://spring.io/projects/spring-cloud-gateway/jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

性能比較jVi28資訊網(wǎng)——每日最新資訊28at.com

??對(duì) Zuul/Spring Cloud Gateway 的一些性能分析可以參考 Spring Cloud Gateway 作者 Spencer Gibb 提供的項(xiàng)目:https://github.com/spencergibb/spring-cloud-gateway-bench。jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

摘自SpringCloud GateWay作者spencergibb 提供的一個(gè)壓測(cè)報(bào)告jVi28資訊網(wǎng)——每日最新資訊28at.com

??總的來(lái)說(shuō),Gateway在處理IO密集型請(qǐng)求場(chǎng)景下有著更大的優(yōu)勢(shì)。原因是: 隨著Spring 5 推出的WebFlux,它是完全異步且非阻塞的,底層也是基于Netty實(shí)現(xiàn)的。我們分別對(duì)Reactor模型和Netty做一個(gè)簡(jiǎn)單介紹。jVi28資訊網(wǎng)——每日最新資訊28at.com

  1. 基于Reactor的反應(yīng)式編程:

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

??其中:mainReactor主要負(fù)責(zé)連接處理(不參與數(shù)據(jù)處理),而subReactor負(fù)責(zé)數(shù)據(jù)的讀?。ú粎⑴c連接). 不再是單線程模型那樣,接收請(qǐng)求和處理數(shù)據(jù)都是在一個(gè)Reactor下進(jìn)行。jVi28資訊網(wǎng)——每日最新資訊28at.com

  1. WebFlux框架:

核心主要是基于NIO的Netty框架,原理說(shuō)明如下:jVi28資訊網(wǎng)——每日最新資訊28at.com

組件關(guān)系:jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

概念說(shuō)明:jVi28資訊網(wǎng)——每日最新資訊28at.com

  • Bootstrap(啟動(dòng)引導(dǎo)類): 可用于連接遠(yuǎn)端服務(wù)器,只綁定一個(gè) EventLoopGroup ( Boss) ServerBootStrap 用于服務(wù)端啟動(dòng)綁定本地端口,綁定兩個(gè) EventLoopGroup (Worker)
  • channel(通道): 是網(wǎng)絡(luò)通信的載體,提供了基本的API用于網(wǎng)絡(luò)I/0 操作如register、bind、connect、read、write、flush 等Netty自己實(shí)現(xiàn)的 Channel是以JDK NIO Channel為基礎(chǔ)的。
  • Handler(處理器): 處理輸入輸出數(shù)據(jù)的邏輯組件。它負(fù)責(zé)實(shí)際處理數(shù)據(jù)的業(yè)務(wù)邏輯
  • EventLoop(事件循環(huán)): 是 Netty 中處理所有事件的線程,負(fù)責(zé)處理連接的生命周期中發(fā)生的各種事件。
  • Pipeline(管道): 包含了一個(gè) Channel 的處理器鏈。通過(guò) Pipeline 可以將多個(gè)處理器按順序組織起來(lái),形成一個(gè)處理流程。

每個(gè)服務(wù)器中都會(huì)有一個(gè) Boss(老板),會(huì)有一群做事情的WorkerBoss(員工) 會(huì)不停地接收新的連接,將連接分配給一個(gè)個(gè) Worker 處理連接jVi28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行過(guò)程:jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

Netty 執(zhí)行過(guò)程:jVi28資訊網(wǎng)——每日最新資訊28at.com

  • 啟動(dòng)引導(dǎo)(Bootstrap): 創(chuàng)建并配置一個(gè)新的 Netty 應(yīng)用。設(shè)置線程模型、Channel 類型、處理器等。
  • 創(chuàng)建 EventLoopGroup: 創(chuàng)建 EventLoopGroup 對(duì)象,它包含一個(gè)或多個(gè) EventLoop,用于處理連接的生命周期中發(fā)生的各種事件。
  • 配置 Channel: 配置 Channel 類型、處理器等,并將 Channel 注冊(cè)到 EventLoop 中。
  • 創(chuàng)建 ChannelPipeline: 每個(gè) Channel 都有一個(gè)與之關(guān)聯(lián)的 ChannelPipeline,用于管理和執(zhí)行所有的 ChannelHandler。
  • 添加 ChannelHandler: 將業(yè)務(wù)邏輯處理器添加到 ChannelPipeline 中,形成處理鏈。
  • 綁定端口: 調(diào)用 bind 方法將 Channel 綁定到指定的端口,開始監(jiān)聽客戶端的連接。
  • 接收連接: 當(dāng)有客戶端連接請(qǐng)求到達(dá)時(shí),EventLoop 將會(huì)通知 ChannelPipeline 中的第一個(gè) ChannelHandler,從而開始處理連接。
  • 數(shù)據(jù)讀寫: 當(dāng)有數(shù)據(jù)讀寫事件發(fā)生時(shí),ChannelPipeline 中的處理器鏈將被觸發(fā),依次處理數(shù)據(jù)。
  • 關(guān)閉連接: 當(dāng)連接關(guān)閉時(shí),Netty 會(huì)釋放相關(guān)的資源,包括關(guān)閉連接、關(guān)閉 EventLoopGroup 等。

關(guān)于SpringCloud GateWay的使用,請(qǐng)自行查閱官網(wǎng)。這里只介紹如何體現(xiàn)NIO異步非阻塞原理的。jVi28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景二、基于消息隊(duì)列-數(shù)據(jù)同步

場(chǎng)景分析:jVi28資訊網(wǎng)——每日最新資訊28at.com

??比如:商城首頁(yè)菜單樹。一般這種場(chǎng)景我們?cè)试S在一定時(shí)間數(shù)據(jù)不一致性。那么就可以使用定時(shí)任務(wù)+消息隊(duì)列。如每隔5分鐘同步一次,達(dá)到數(shù)據(jù)最終一致。jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

注意事項(xiàng):jVi28資訊網(wǎng)——每日最新資訊28at.com

??這種數(shù)據(jù)同步方案主要適用于數(shù)據(jù)實(shí)時(shí)性要求不高的場(chǎng)景,因?yàn)椋憾〞r(shí)任務(wù)處理存在一定時(shí)間間隔,會(huì)有同步延時(shí)。同時(shí)在時(shí)間窗口期數(shù)據(jù)可能發(fā)生變更。還有就是數(shù)據(jù)最終一致性的保證,主要取決于MQ的可靠性。jVi28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景三、基于消息隊(duì)列-數(shù)據(jù)交互

場(chǎng)景分析:jVi28資訊網(wǎng)——每日最新資訊28at.com

??三方平臺(tái)交互,上游系統(tǒng)(A)的數(shù)據(jù)和下游系統(tǒng)(B)的數(shù)據(jù)進(jìn)行接口規(guī)范轉(zhuǎn)化。此處可能涉及到很多業(yè)務(wù)轉(zhuǎn)到同一個(gè)平臺(tái)或者不同平臺(tái)。而我們接口轉(zhuǎn)化的功能是一致的。當(dāng)然你可以使用Feign直接調(diào)用。但是流量增加、網(wǎng)絡(luò)阻塞時(shí)可能會(huì)出現(xiàn)調(diào)用失敗,導(dǎo)致未能成功送達(dá)下游。因此我們可以這樣設(shè)計(jì):jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

注意事項(xiàng):jVi28資訊網(wǎng)——每日最新資訊28at.com

??這種異步設(shè)計(jì)一方面為了系統(tǒng)內(nèi)部服務(wù)之間解耦,另一方面起到了削峰填谷的作用。但是引入消息隊(duì)列和轉(zhuǎn)化服務(wù),增加了系統(tǒng)的復(fù)雜性。因?yàn)殒溌份^長(zhǎng),出現(xiàn)問(wèn)題時(shí)排查起來(lái)比較困難。因此要在數(shù)據(jù)庫(kù)中盡可能存留記錄明細(xì),方便審查。另外,也可能出現(xiàn)消息積壓等問(wèn)題。當(dāng)然這是消息隊(duì)列存在的共性問(wèn)題。jVi28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景四、基于消息隊(duì)列-短信功能

場(chǎng)景分析:jVi28資訊網(wǎng)——每日最新資訊28at.com

??日常我們會(huì)遇到很多這種發(fā)短信的情況。比如,jVi28資訊網(wǎng)——每日最新資訊28at.com

  1. 手機(jī)訂購(gòu)流量套餐,發(fā)短信提醒生效日期
  2. 快遞達(dá)到指定地點(diǎn),短信同步收件信息
  3. 銀行轉(zhuǎn)賬成功,提醒交易明細(xì)
  4. 上班掃碼刷地鐵,通知扣費(fèi)情況
  5. 會(huì)員注冊(cè)滿一年,會(huì)在前一個(gè)月發(fā)短信到期提醒。

......jVi28資訊網(wǎng)——每日最新資訊28at.com

那么對(duì)于短信場(chǎng)景,我們?nèi)绾卧O(shè)計(jì)呢?jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

注意事項(xiàng):這種異步設(shè)計(jì)一方面為了將發(fā)送短信的功能獨(dú)立出來(lái)。jVi28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景五、基于消息隊(duì)列-日志采集

場(chǎng)景分析:jVi28資訊網(wǎng)——每日最新資訊28at.com

??在業(yè)務(wù)系統(tǒng)中,一般我們會(huì)進(jìn)行日志采集和可視化展示。ELK 是由 Elasticsearch、Logstash 和 Kibana 組成的一套日志管理和分析解決方案。結(jié)合 Kafka 使用時(shí),通常用于搭建一個(gè)高效的日志處理系統(tǒng)。jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

ELK 工作流程并結(jié)合 Kafka 的工作流程描述:jVi28資訊網(wǎng)——每日最新資訊28at.com

  1. 生產(chǎn)者發(fā)送日志到 Kafka:
  • 應(yīng)用程序或系統(tǒng)生成日志,并通過(guò) Kafka 生產(chǎn)者發(fā)送日志消息到 Kafka 集群。
  • Kafka 主題(Topic)通常用于組織和分類不同類型的日志數(shù)據(jù)。
  1. Logstash 消費(fèi) Kafka 中的日志:
  • Logstash 作為 Kafka 消費(fèi)者,通過(guò) Kafka Input 插件訂閱一個(gè)或多個(gè) Kafka 主題。jVi28資訊網(wǎng)——每日最新資訊28at.com

  • Logstash 接收到 Kafka 中的日志消息后,可以進(jìn)行多種操作,如解析日志、添加字段、過(guò)濾、轉(zhuǎn)換格式等。jVi28資訊網(wǎng)——每日最新資訊28at.com

  1. jVi28資訊網(wǎng)——每日最新資訊28at.com

    Logstash 處理日志并發(fā)送到 Elasticsearch:jVi28資訊網(wǎng)——每日最新資訊28at.com

    jVi28資訊網(wǎng)——每日最新資訊28at.com

  • Logstash 通過(guò) Elasticsearch Output 插件將處理后的日志數(shù)據(jù)發(fā)送到 Elasticsearch 集群。jVi28資訊網(wǎng)——每日最新資訊28at.com

  • Logstash 可以將日志數(shù)據(jù)根據(jù)配置的索引模式(Index Pattern)劃分到不同的索引中,以便更好地管理和查詢。jVi28資訊網(wǎng)——每日最新資訊28at.com

  1. jVi28資訊網(wǎng)——每日最新資訊28at.com

    Elasticsearch 存儲(chǔ)和索引日志數(shù)據(jù):jVi28資訊網(wǎng)——每日最新資訊28at.com

    jVi28資訊網(wǎng)——每日最新資訊28at.com

  • Elasticsearch 接收 Logstash 發(fā)送過(guò)來(lái)的日志數(shù)據(jù),并將其存儲(chǔ)在分布式索引中。jVi28資訊網(wǎng)——每日最新資訊28at.com

  • Elasticsearch 提供了強(qiáng)大的全文搜索和分析功能,支持對(duì)大量的日志數(shù)據(jù)進(jìn)行高效的查詢和分析。jVi28資訊網(wǎng)——每日最新資訊28at.com

  1. jVi28資訊網(wǎng)——每日最新資訊28at.com

    Kibana 可視化和查詢:jVi28資訊網(wǎng)——每日最新資訊28at.com

    jVi28資訊網(wǎng)——每日最新資訊28at.com

  • Kibana 作為 Elasticsearch 的前端界面,提供了豐富的可視化工具和查詢界面。jVi28資訊網(wǎng)——每日最新資訊28at.com

  • 用戶可以使用 Kibana 創(chuàng)建儀表板、圖表,執(zhí)行復(fù)雜的查詢,實(shí)時(shí)監(jiān)控日志數(shù)據(jù)等。jVi28資訊網(wǎng)——每日最新資訊28at.com

整個(gè)工作流程如下:jVi28資訊網(wǎng)——每日最新資訊28at.com

+----------------------+       +----------------------+       +----------------------+|   Producer           | ----> |     Kafka            | ----> |      Logstash         | |   (Log Generator)    |       |     (Message Broker) |       |                      |   +----------------------+       +----------------------+       +----------+-----------+                                                                               |                                                                               |                                                                               v                                                                     +----------------------+                                                                     |   Elasticsearch      |                                                                     |   (Log Storage)       |                                                                     +----------------------+                                                                               |                                                                               |                                                                               v                                                                     +----------------------+                                                                     |        Kibana          |                                                                     |   (Visualization Tool)|                                                                     +----------------------+

注意事項(xiàng):jVi28資訊網(wǎng)——每日最新資訊28at.com

  • Kafka 作為消息隊(duì)列中介,實(shí)現(xiàn)了解耦,使生產(chǎn)者與消費(fèi)者之間的依賴性降低。
  • Logstash 提供了靈活的數(shù)據(jù)處理能力,可以根據(jù)具體需求進(jìn)行配置,包括過(guò)濾、解析、字段添加等操作。
  • Elasticsearch 提供了高效的全文搜索和分析功能,以及分布式存儲(chǔ),適用于處理大量的日志數(shù)據(jù)。
  • Kibana 提供了直觀的可視化工具,幫助用戶更好地理解和分析日志數(shù)據(jù)。

??整個(gè) ELK + Kafka 的架構(gòu)可以幫助實(shí)現(xiàn)高效的日志收集、處理和可視化,適用于大規(guī)模分布式系統(tǒng)中的日志管理。jVi28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景六、基于CompletableFuture 異步多線程批處理任務(wù)

??當(dāng)使用多線程和 CompletableFuture 來(lái)執(zhí)行批處理任務(wù)時(shí),可以通過(guò)將任務(wù)分成多個(gè)子任務(wù),并使用 CompletableFuture 來(lái)異步執(zhí)行這些子任務(wù)。主要思想如下:jVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jVi28資訊網(wǎng)——每日最新資訊28at.com

假設(shè)我們有一個(gè)批處理任務(wù),需要對(duì)一組數(shù)據(jù)進(jìn)行處理:jVi28資訊網(wǎng)——每日最新資訊28at.com

import java.util.ArrayList;import java.util.List;import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;import java.util.concurrent.Executors;import java.util.concurrent.ThreadPoolExecutor;public class BatchProcessingExample {    public static void main(String[] args) {        // 模擬一組數(shù)據(jù)        List<Integer> data = generateData(10);        // 定義線程池        ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5);        // 將數(shù)據(jù)分成多個(gè)子任務(wù)進(jìn)行處理        List<CompletableFuture<Void>> futures = new ArrayList<>();        int batchSize = 3;        for (int i = 0; i < data.size(); i += batchSize) {            List<Integer> batch = data.subList(i, Math.min(i + batchSize, data.size()));            CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {                // 在這里執(zhí)行批處理的具體邏輯                processBatch(batch);            }, executor);            futures.add(future);        }        // 等待所有子任務(wù)完成        CompletableFuture<Void> allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));        // 在所有子任務(wù)完成后關(guān)閉線程池        allOf.thenRun(executor::shutdown);        try {            // 等待所有任務(wù)完成            allOf.get();        } catch (InterruptedException | ExecutionException e) {            e.printStackTrace();        }    }    private static List<Integer> generateData(int size) {        List<Integer> data = new ArrayList<>();        for (int i = 1; i <= size; i++) {            data.add(i);        }        return data;    }    private static void processBatch(List<Integer> batch) {        // 模擬批處理邏輯        for (Integer value : batch) {            System.out.println(Thread.currentThread().getName() + " - Processing: " + value);        }    }}

??以上我們模擬了一組數(shù)據(jù),然后將數(shù)據(jù)分成多個(gè)批次,每個(gè)批次使用 CompletableFuture 異步執(zhí)行。CompletableFuture.allOf 用于等待所有子任務(wù)完成。jVi28資訊網(wǎng)——每日最新資訊28at.com

在這個(gè)示例中,主要體現(xiàn)了以下異步的思想和操作:jVi28資訊網(wǎng)——每日最新資訊28at.com

  1. CompletableFuture 異步執(zhí)行:使用CompletableFuture.runAsync方法,將任務(wù)異步提交給CompletableFuture,該任務(wù)會(huì)在一個(gè)線程池中異步執(zhí)行。這允許程序繼續(xù)執(zhí)行而不必等待子任務(wù)完成。
CompletableFuture.runAsync(() -> {    // 執(zhí)行異步任務(wù)的邏輯}, executor);
  1. 等待所有異步任務(wù)完成:使用CompletableFuture.allOf方法等待所有的子任務(wù)完成。這個(gè)方法會(huì)返回一個(gè)新的CompletableFuture,當(dāng)所有輸入的CompletableFuture都完成時(shí),這個(gè)新的CompletableFuture也會(huì)完成。
CompletableFuture<Void> allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
  1. 在所有異步任務(wù)完成后執(zhí)行操作:使用thenRun方法,當(dāng)所有子任務(wù)完成后,執(zhí)行指定的操作。在這個(gè)示例中,用于關(guān)閉線程池。
allOf.thenRun(executor::shutdown);

??這些異步操作幫助提高程序的并發(fā)性和響應(yīng)性,特別在處理批量任務(wù)時(shí),可以更有效地利用系統(tǒng)資源。異步編程模型能夠允許程序在等待某些操作完成的同時(shí)繼續(xù)執(zhí)行其他操作,從而提高系統(tǒng)的效率。jVi28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

??異步設(shè)計(jì)在處理并發(fā)和提高系統(tǒng)性能方面具有優(yōu)勢(shì),但也帶來(lái)了一些可能的問(wèn)題。以上提供的場(chǎng)景和方案僅供參考。使用過(guò)程中應(yīng)當(dāng)根據(jù)業(yè)務(wù)特征合理選擇具體方案。jVi28資訊網(wǎng)——每日最新資訊28at.com

優(yōu)勢(shì):

  1. 并發(fā)性和響應(yīng)性: 異步設(shè)計(jì)可以提高系統(tǒng)的并發(fā)性和響應(yīng)性,允許系統(tǒng)在等待某些操作完成的同時(shí)繼續(xù)執(zhí)行其他操作,從而更有效地利用資源。
  2. 性能提升: 異步操作允許系統(tǒng)并發(fā)地執(zhí)行多個(gè)任務(wù),減少了等待時(shí)間,提高了系統(tǒng)的性能。尤其在 I/O 密集型任務(wù)中,異步操作能夠更充分地利用 CPU。
  3. 可伸縮性: 異步設(shè)計(jì)有助于構(gòu)建可伸縮的系統(tǒng),能夠更好地處理大量并發(fā)請(qǐng)求,適應(yīng)系統(tǒng)負(fù)載的變化。
  4. 降低資源占用: 異步操作可以減少線程或進(jìn)程的創(chuàng)建和銷毀開銷,從而降低系統(tǒng)資源的占用。

可能產(chǎn)生的問(wèn)題:

  1. 數(shù)據(jù)一致性: 異步操作可能導(dǎo)致數(shù)據(jù)一致性的問(wèn)題,特別是在涉及到多個(gè)異步任務(wù)的場(chǎng)景。需要采取額外的手段,如事務(wù)或事件溯源,來(lái)保障數(shù)據(jù)的一致性。
  2. 冪等性: 異步操作的重試機(jī)制可能引入冪等性問(wèn)題。如果一個(gè)操作不是冪等的,重試可能導(dǎo)致不正確的結(jié)果。需要確保異步操作是冪等的,或者采用冪等性保障措施。
  3. 消息丟失: 在消息傳遞的異步系統(tǒng)中,由于網(wǎng)絡(luò)故障或系統(tǒng)故障,消息可能會(huì)丟失。需要實(shí)施消息確認(rèn)、重試和持久化等機(jī)制,以防止消息丟失。
  4. 異步調(diào)用鏈的復(fù)雜性: 復(fù)雜的異步調(diào)用鏈可能使代碼難以理解和維護(hù),需要謹(jǐn)慎設(shè)計(jì)和文檔化。

本文鏈接:http://m.www897cc.com/showinfo-26-70427-0.html聊聊項(xiàng)目實(shí)戰(zhàn)中的異步設(shè)計(jì)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: JS小知識(shí),分享七個(gè)高頻的工具函數(shù),也許你用的上

下一篇: Python 實(shí)現(xiàn)定時(shí)任務(wù)的九種方案

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 28個(gè)SpringBoot項(xiàng)目中常用注解,日常開發(fā)、求職面試不再懵圈

    前言在使用SpringBoot開發(fā)中或者在求職面試中都會(huì)使用到很多注解或者問(wèn)到注解相關(guān)的知識(shí)。本文主要對(duì)一些常用的注解進(jìn)行了總結(jié),同時(shí)也會(huì)舉出具體例子,供大家學(xué)習(xí)和參考。注解
  • CSS單標(biāo)簽實(shí)現(xiàn)轉(zhuǎn)轉(zhuǎn)logo

    轉(zhuǎn)轉(zhuǎn)品牌升級(jí)后更新了全新的Logo,今天我們用純CSS來(lái)實(shí)現(xiàn)轉(zhuǎn)轉(zhuǎn)的新Logo,為了有一定的挑戰(zhàn)性,這里我們只使用一個(gè)標(biāo)簽實(shí)現(xiàn),將最大化的使用CSS能力完成Logo的繪制與動(dòng)畫效果。新logo
  • 量化指標(biāo)是與非:挽救被量化指標(biāo)扼殺的技術(shù)團(tuán)隊(duì)

    作者 | 劉新翠整理 | 徐杰承本文整理自快狗打車技術(shù)總監(jiān)劉新翠在WOT2023大會(huì)上的主題分享,更多精彩內(nèi)容及現(xiàn)場(chǎng)PPT,請(qǐng)關(guān)注51CTO技術(shù)棧公眾號(hào),發(fā)消息【W(wǎng)OT2023PPT】即可直接領(lǐng)取
  • 三言兩語(yǔ)說(shuō)透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術(shù),可以幫助我們寫出更加優(yōu)雅、泛用的函數(shù)。本文將首先介紹柯里化和反柯里化的概念、實(shí)現(xiàn)原理和應(yīng)用
  • 谷歌KDD'23工作:如何提升推薦系統(tǒng)Ranking模型訓(xùn)練穩(wěn)定性

    谷歌在KDD 2023發(fā)表了一篇工作,探索了推薦系統(tǒng)ranking模型的訓(xùn)練穩(wěn)定性問(wèn)題,分析了造成訓(xùn)練穩(wěn)定性存在問(wèn)題的潛在原因,以及現(xiàn)有的一些提升模型穩(wěn)定性方法的不足,并提出了一種新
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業(yè) 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁(yè)&ldquo;充值中心&rdquo;入口上線了本機(jī)生活界面。壹覽商業(yè)發(fā)現(xiàn),該界面目前主要
  • 2納米決戰(zhàn)2025

    集微網(wǎng)報(bào)道 從三強(qiáng)爭(zhēng)霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來(lái)。無(wú)論是老牌勁旅臺(tái)積電、三星,還是誓言重回先進(jìn)制程領(lǐng)先地位的英特爾,甚至初成立不久的新
  • 與兆芯合作 聯(lián)想推出全新旗艦版筆記本電腦開天N7系列

    聯(lián)想與兆芯合作推出全新聯(lián)想旗艦版筆記本電腦開天 N7系列。這個(gè)系列采用兆芯KX-6640MA處理器平臺(tái),KX-6640MA 處理器是采用了陸家嘴架構(gòu),16nm 工藝,4 核 4 線
  • 電博會(huì)上海爾智家模擬500平大平層,還原生活空間沉浸式體驗(yàn)

    電博會(huì)為了更好地讓參展觀眾真正感受到智能家居的絕妙之處,海爾智家的程傳嶺先生同樣介紹了展會(huì)上海爾智家的模擬500平大平層,還原生活空間沉浸式體驗(yàn)。程傳
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美亚洲网站| 99精品免费| 亚洲第一精品影视| 欧美激情综合五月色丁香| 亚洲欧美日韩国产中文在线| 亚洲国产精品成人一区二区 | 免费在线观看一区二区| 亚洲国产毛片完整版 | 久久激情综合| 一本一本久久a久久精品综合麻豆| 免费成人性网站| 欧美精品首页| 久久亚洲春色中文字幕久久久| 亚洲资源av| 欧美性大战久久久久| 蜜臀av在线播放一区二区三区| 久久激情网站| 亚洲精品视频在线| 精品91在线| 国产日本欧美视频| 国产精品www色诱视频| 欧美精品在欧美一区二区少妇| 亚洲自拍电影| 日韩亚洲国产精品| 亚洲国产欧美日韩另类综合| 一区二区三区无毛| 国产乱码精品一区二区三区忘忧草| 欧美人与禽猛交乱配| 老司机精品视频网站| 久久精品国产成人| 欧美精品激情在线| 男人的天堂成人在线| 理论片一区二区在线| 欧美日韩aaaaa| 国产亚洲激情在线| 国产欧美日韩在线播放| 国产精品久久久久国产精品日日| 欧美日韩免费一区| 欧美激情视频一区二区三区免费 | 欧美国产三级| 欧美日在线观看| 欧美日韩一区视频| 国内一区二区三区在线视频| 国产视频欧美| 狠狠久久五月精品中文字幕| 99成人在线| 亚洲无限av看| 亚洲欧美一区二区激情| 亚洲一区在线看| 欧美在线综合视频| 久久久五月婷婷| 欧美高清影院| 国内欧美视频一区二区| 在线电影国产精品| 日韩午夜中文字幕| 久久久最新网址| 欧美插天视频在线播放| 欧美日韩成人在线视频| 国产精品第十页| 亚洲欧洲日产国产综合网| 亚洲免费福利视频| 亚洲一区网站| 久久精品主播| 老司机午夜精品视频| 欧美精品久久天天躁| 国产精品久久久久天堂| 国产欧美日韩在线| 国产午夜精品一区理论片飘花| 国内精品嫩模av私拍在线观看| 亚洲网站在线观看| 欧美日韩精品久久久| 国产欧美日本在线| 亚洲一区二区三区色| 久久精品视频免费| 国产女人精品视频| 亚洲大胆美女视频| 久久乐国产精品| 国产一区二区观看| 香蕉久久夜色| 欧美黑人在线播放| 亚洲国产精品成人一区二区| 老司机午夜精品视频| 国产精品v亚洲精品v日韩精品 | 亚洲一品av免费观看| 欧美经典一区二区三区| 亚洲国产一区二区视频| 亚洲一二三级电影| 欧美午夜精品久久久| 在线精品视频免费观看| 亚洲性xxxx| 国产精品日韩精品欧美在线| 亚洲日韩欧美一区二区在线| 亚洲欧美另类国产| 国产精品爽黄69| 亚洲欧洲日本一区二区三区| 欧美大片免费久久精品三p| 亚洲三级性片| 久久久999| 国产精品久久久久久亚洲毛片| 亚洲午夜久久久久久久久电影院 | 欧美电影免费观看网站| 国内精品国产成人| 日韩亚洲精品电影| 欧美肉体xxxx裸体137大胆| 亚洲综合第一| 欧美日韩免费区域视频在线观看| 亚洲婷婷免费| 欧美激情精品久久久六区热门 | 欧美黄色一区二区| 99ri日韩精品视频| 国产精品毛片a∨一区二区三区| 日韩视频久久| 国产精品激情| av成人免费在线| 国产精品热久久久久夜色精品三区| 日韩视频在线永久播放| 免费久久99精品国产自| 亚洲精品视频在线播放| 国产精品久99| 久久久国产91| 亚洲免费观看视频| 国产精品网站在线| 久久久久久有精品国产| 国产一区二区观看| 免费在线国产精品| 一区二区三区精品视频在线观看 | 伊人婷婷久久| 欧美日韩一区高清| 欧美在线免费视屏| 亚洲人成亚洲人成在线观看| 美女国产一区| 中文av字幕一区| 欧美成人中文字幕在线| 亚洲电影欧美电影有声小说| 久久久久免费视频| 亚洲美女黄色片| 国产日韩欧美麻豆| 欧美极品一区二区三区| 午夜久久久久久久久久一区二区| 1000部国产精品成人观看| 久久婷婷蜜乳一本欲蜜臀| 国产欧美一区二区三区在线看蜜臀| 久久午夜精品| 亚洲香蕉在线观看| 国内久久精品视频| 欧美色网在线| 乱码第一页成人| 亚洲欧美日韩国产综合在线| 在线观看三级视频欧美| 欧美色中文字幕| 欧美成人精品福利| 午夜一区二区三区不卡视频| 亚洲人成网站色ww在线| 国产一区二区三区在线观看视频 | 亚洲美女毛片| 韩日欧美一区| 国产精品乱子久久久久| 欧美成人性生活| 久久精品综合一区| 亚洲欧美区自拍先锋| 亚洲欧洲在线一区| 国产在线视频欧美| 国产精品久久久久久久久久久久久久 | 免费在线看一区| 欧美在线一区二区| 黄色成人在线网址| 欧美高清一区| 久久久综合网站| 欧美在线观看日本一区| 正在播放亚洲一区| 国产欧美日韩综合| 欧美日韩免费网站| 亚洲尤物在线| 亚洲精选国产| 国产精品亚洲不卡a| 欧美精品在欧美一区二区少妇| 久久久免费观看视频| 亚洲自拍偷拍视频| 99这里有精品| 国产深夜精品| 国产精品久久久久久久久久直播 | 1000部精品久久久久久久久| 国产主播一区二区三区四区| 国产目拍亚洲精品99久久精品| 国产精品激情电影| 欧美日韩一区二区精品| 欧美一区观看| 亚洲免费伊人电影在线观看av| 9l国产精品久久久久麻豆| 91久久中文| 亚洲欧洲在线播放| 国产美女精品视频免费观看| 欧美午夜免费电影| 欧美日韩免费看| 久久av免费一区| 午夜久久资源| 好吊一区二区三区| 国产欧美一区二区三区视频| 国产精品美女主播| 国产精品久久国产精麻豆99网站| 欧美三级日韩三级国产三级 | 国产精品久久中文| 欧美成人高清| 欧美极品一区|