Java中怎么實現(xiàn)響應(yīng)式編程

Java中怎么實現(xiàn)響應(yīng)式編程,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

專業(yè)從事企業(yè)網(wǎng)站建設(shè)和網(wǎng)站設(shè)計服務(wù),包括網(wǎng)站建設(shè)、域名注冊、虛擬空間、企業(yè)郵箱、微信公眾號開發(fā)、微信支付寶小程序開發(fā)App定制開發(fā)、軟件開發(fā)、等服務(wù)。公司始終通過不懈的努力和以更高的目標(biāo)來要求自己,在不斷完善自身管理模式和提高技術(shù)研發(fā)能力的同時,大力倡導(dǎo)推行新經(jīng)濟品牌戰(zhàn)略,促進互聯(lián)網(wǎng)事業(yè)的發(fā)展。

Reactive概念

       Reactive Programming: 響應(yīng)式編程,異步非阻塞就是響應(yīng)式編程,與之相對應(yīng)的就是命令式編程。是一種基于數(shù)據(jù)流(data stream)和變化傳遞的申明式的編程范式。 Reactive并不是一門新技術(shù),不用Reactive照樣可是實現(xiàn)非阻塞編程,比如用觀察者模式實現(xiàn)。Reactive的另一種實現(xiàn)方式就是消息隊列。

       Reactive的關(guān)鍵點:

      聲明式的編程規(guī)范,數(shù)據(jù)流,傳播改變,使用動態(tài)數(shù)組或者靜態(tài)事件。   

      spring5實現(xiàn)了一部分Reactive:

      Spring WebFlux:  Reactive Web(non-blocking  servers  in genneral)

      Spring Web MVC:傳統(tǒng)的Servlet Web (serrvlet application in general)

為什么需要反應(yīng)式的編程

 1.命令式編程VS聲明式編程

       實際上我們大多數(shù)程序員都是使用命令式編程,這也是計算機的工作方式。命令式編程就是對硬件操作的抽象,程序員要通過指令,精確的告訴計算機干什么事情。聲明式編程是解救程序員的利器,聲明式編程更關(guān)注的是我要什么(What)而不是怎么去做(How).SQL是經(jīng)典的聲明式語言,我們通過SQL描述想要什么,最終由數(shù)據(jù)庫引擎執(zhí)行SQL語句并將結(jié)果返回給我們。

2.同步編程VS異步編程

        在談到同步與異步的時候就要說一下,阻塞與非阻塞的概念,因為這兩組概念很容易混淆。他們描述的是同一個東西,但是關(guān)注點不同。阻塞與非阻塞描述的是當(dāng)前線程的狀態(tài),而同步與異步則關(guān)注方法調(diào)用結(jié)果的通知機制。因為是從不同角度描述方法的調(diào)用過程,所以這兩組概念可以相互組合,即將線程狀態(tài)以及結(jié)果通知機制進行組合。例如JDK1.3之前BIO是同步則塞,JDK1.4及以后的NIO是同步非阻塞,JDK1.7及以后的NIO2是異步非阻塞模式。

      同步編程的優(yōu)點是代碼簡單并且容易理解,代碼按照先后順序執(zhí)行,缺點是CPU利用率低,大部分都浪費在IO等待上。

      異步編程通過充分利用CPU資源并行執(zhí)行任務(wù),在執(zhí)行時間和資源利用率上遠(yuǎn)遠(yuǎn)高于同步方法。

      同步編程面臨的挑戰(zhàn):

傳統(tǒng)應(yīng)用通?;赟ervlet容器部署,而Servlet是基于線程的請求處理模型。從上文的討論中我們發(fā)現(xiàn),通常需要設(shè)置一個較大的線程池獲得良好的性能,較大的線程池會導(dǎo)致以下三個問題:

1.額外的內(nèi)存開銷。在Java中每個線程都有自己??臻g,默認(rèn)是1MB。如果線程池的大小被設(shè)置為200,那么需要200MB內(nèi)存,一方面造成內(nèi)存浪費,一方面導(dǎo)致應(yīng)用啟動慢。

2.CPU利用率低 有兩個方面會導(dǎo)致CPU利用率很低。一方面是JDK1.2之后,每個平臺的JVM實現(xiàn)都使用1:1線程模型,這意味著一個java線程會被映射到一個輕量級進程,而有效的輕量級進程數(shù)取決于CPU的個數(shù)以及核數(shù)。如果Java的線程數(shù)遠(yuǎn)大于輕量級進程數(shù),則頻繁的線程上下文切換會浪費大量的CPU時間,另一方面,由于傳統(tǒng)的遠(yuǎn)程操作或者IO操作均為阻塞操作,會導(dǎo)致執(zhí)行線程掛起從而無法執(zhí)行其他任務(wù),大大降低了CPU的利用率。

3.資源競爭激烈 當(dāng)增大線程池后其他共享資源可能成為性能瓶頸,如數(shù)據(jù)庫連接資源。會導(dǎo)致多個線程競爭數(shù)據(jù)庫連接,使得數(shù)據(jù)庫連接成為系統(tǒng)瓶頸。

關(guān)于Java中怎么實現(xiàn)響應(yīng)式編程問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

新聞名稱:Java中怎么實現(xiàn)響應(yīng)式編程
標(biāo)題網(wǎng)址:http://muchs.cn/article36/piscsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、關(guān)鍵詞優(yōu)化、微信小程序、用戶體驗、動態(tài)網(wǎng)站網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)