這篇文章主要講解了“Spring Boot中異步和多線程的區(qū)別是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring Boot中異步和多線程的區(qū)別是什么”吧!
成都創(chuàng)新互聯(lián)公司憑借專業(yè)的設計團隊扎實的技術支持、優(yōu)質高效的服務意識和豐厚的資源優(yōu)勢,提供專業(yè)的網站策劃、成都網站制作、網站設計、網站優(yōu)化、軟件開發(fā)、網站改版等服務,在成都10年的網站建設設計經驗,為成都近1000家中小型企業(yè)策劃設計了網站。
最近在研究Spring Boot中的異步處理,發(fā)現(xiàn)涉及到異步和多線程的很多知識點,就先寫幾篇關于異步與多線程的文章,帶大一起回顧或學習一下相關的知識點。下面開始正文內容:
在本文中,我們通過一些通俗易懂的方式來解釋異步編程和多線程編程,然后再介紹一下它們之間的區(qū)別。
首先來看一下異步模型。在異步模型中,允許同一時間發(fā)生(處理)多個事件。程序調用一個耗時較長的功能(方法)時,它并不會阻塞程序的執(zhí)行流程,程序會繼續(xù)往下執(zhí)行。當功能執(zhí)行完畢時,程序能夠獲得執(zhí)行完畢的消息或能夠訪問到執(zhí)行的結果(如果有返回值或需要返回值時)。
下面通過一個示例來看一下同步和異步的區(qū)別。示例中程序通過網絡獲取兩個文件,并對兩個文件進行合并處理:
上述示例,在異步系統(tǒng)當中的解決方案是開啟一個額外的線程進行處理。第一個線程獲取第一個文件,第二個線程獲取第二個文件,第二個線程并不需要等待第一個線程執(zhí)行完畢再執(zhí)行。當兩個線程都獲得到對應的結果之后,再重新同步處理合并結果的操作。
再來看另外一個場景。單線程方法讀取OS(操作系統(tǒng))當中的文件并需要進行數(shù)學運算。而在異步系統(tǒng)中,程序發(fā)起讀取OS中文件的請求,由于讀取操作比較耗時,在等待讀取文件時,程序會將控制器返回給CPU進行數(shù)學運算。
在異步編程中,通常會針對比較耗時的功能提供一個函數(shù),函數(shù)的參數(shù)中包含一個額外的參數(shù),用于回調。而這個函數(shù)往往稱作回調函數(shù)。當比較耗時的功能執(zhí)行完畢時,通過回調函數(shù)將結果返回。關于回調函數(shù)相關的知識可參考文章《兩個經典例子讓你徹底理解java回調機制》。
多線程是指同時并發(fā)或并行執(zhí)行多個指令(線程)。
在單核處理器上,多線程往往會給人程序是在并行執(zhí)行的錯覺。實際上,處理器是通過調度算法在多線程之間進行切換和調度。或者根據(jù)外部輸入(中斷)和線程的優(yōu)先級的組合來進行線程的切換。
在多核處理器上,線程才是真正的并行運行。多個處理器同時執(zhí)行多個線程,以達到更加高效的處理。
一個簡單的示例就是:開啟兩個瀏覽器窗口同時下載兩個文件。每個窗口都使用一個新的線程去下載文件,它們之間并不需要誰等待誰完成,而是并行進行下載。
下圖展示了并發(fā)執(zhí)行多線程應用程序的流程:
通過上面的介紹,我們可以看出多線程都是關于功能的并發(fā)執(zhí)行。而異步編程是關于函數(shù)之間的非阻塞執(zhí)行,我們可以將異步應用于單線程或多線程當中。
因此,多線程只是異步編程的一種實現(xiàn)形式。
比如,你和你的朋友決定一起做一頓午餐。“異步”就是你對朋友說:“你去商店買意大利面,回來的時候告訴我一聲,然后一起做午餐。在你買意大利面的同時,我去準備番茄醬和飲料?!?/p>
而“線程”是:“你燒水,我加熱番茄醬。當水燒開了,告訴我,我把意大利放進去。當番茄醬熱了,你可以把奶酪添加進去。當兩者都完成了,就可以坐下來一起吃晚餐?!痹诰€程的示例中,我們可以看到“When,Do”的事件順序,而這些順序代表著每個人(線程)的指令集集合的順序。
上述示例可以看出,多線程是與具體的執(zhí)行者相關的,而異步是與任務相關的。
多線程是程序設計的邏輯層概念,它是進程中并發(fā)運行的一段代碼,可以實現(xiàn)線程間的切換執(zhí)行。
異步和同步是相對的,異步就是彼此獨立,在等待某事件的過程中繼續(xù)做自己的事,不需要等待這一事件完成后再工作。
多線程就是實現(xiàn)異步的一個方式。異步是讓調用方法的主線程不需要同步等待另一線程的完成,從而可以讓主線程干其它的事情。
所以本質上,異步和多線程并不是一個同等關系,異步是最終目的,多線程只是實現(xiàn)異步的一種手段。
面對多線程和異步,我們該如何選擇呢?其實,通常情況下選擇的依據(jù)是主要取決于性能。
那么,同步/異步與單線程/多線程之間的所有組合,哪種模型表現(xiàn)更好?
簡而言之,對于具有大量I/O操作和不同計算的大規(guī)模應用程序,使用異步多線程有利于充分利用計算資源,并且能夠照顧到非阻塞函數(shù)。這也是所有操作系統(tǒng)所采用的線程模型。
編寫異步操作的復雜程度較高,程序主要使用回調方式進行處理,與正常的思維方式有些出入,而且難以調試。而多線程的使用(濫用)會給系統(tǒng)帶來上下文切換的額外負擔,并且線程間的共享變量可能造成死鎖。
因此在實現(xiàn)這兩種模式時,往往需要處理資源競爭、死鎖、共享資源和回調事件等問題。
感謝各位的閱讀,以上就是“Spring Boot中異步和多線程的區(qū)別是什么”的內容了,經過本文的學習后,相信大家對Spring Boot中異步和多線程的區(qū)別是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!
網頁名稱:SpringBoot中異步和多線程的區(qū)別是什么
本文網址:http://aaarwkj.com/article40/peiieo.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網站策劃、微信小程序、網站收錄、域名注冊、服務器托管
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)