欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

什么是Thread-Per-Message設(shè)計(jì)模式

這篇文章主要講解了“什么是Thread-Per-Message設(shè)計(jì)模式”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“什么是Thread-Per-Message設(shè)計(jì)模式”吧!

目前累計(jì)服務(wù)客戶成百上千家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗(yàn)。以網(wǎng)站設(shè)計(jì)水平和技術(shù)實(shí)力,樹立企業(yè)形象,為客戶提供成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、網(wǎng)絡(luò)營銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。創(chuàng)新互聯(lián)始終以務(wù)實(shí)、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計(jì)的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。

并發(fā)編程的核心是什么?

  • 同步

  • 互斥

  • 分工

并發(fā)編程解決分工問題有哪些設(shè)計(jì)模式?

  • Thread-Per-Message模式

  • Worker Thread模式

  • 生產(chǎn)者-消費(fèi)者模式

  • …

簡單說說Thread-Per-Message模式

將事情委托他人代辦,有個(gè)好處,就是可以專心做自己事了。

編程也是這樣,比如寫一個(gè)HTTP  Server,很顯然只能在主線程中接收請求,而不能處理HTTP請求,因?yàn)槿粼谥骶€程中處理HTTP請求,則同一時(shí)間只能處理一個(gè)請求,太慢了!這時(shí)就可以采取委托的思路,創(chuàng)建一個(gè)子線程,委托子線程去處理HTTP請求。

這種騷操作,在并發(fā)領(lǐng)域就是Thread-Per-Message模式(后文簡稱為 TPM):為每個(gè)任務(wù)分配一個(gè)獨(dú)立線程。這也是最簡單的一種分工方案。

Java 線程實(shí)現(xiàn)TPM

TPM最經(jīng)典的應(yīng)用場景就是網(wǎng)絡(luò)編程的服務(wù)端實(shí)現(xiàn)。

服務(wù)端為每個(gè)客戶端請求創(chuàng)建一個(gè)獨(dú)立線程,當(dāng)線程處理完請求后,自動(dòng)銷毀,這是最簡單的并發(fā)處理網(wǎng)絡(luò)請求的方法。

  • 比如echo程序的服務(wù)端

什么是Thread-Per-Message設(shè)計(jì)模式

但該實(shí)現(xiàn)不可能在實(shí)際生產(chǎn)使用,因?yàn)镴ava線程實(shí)在是個(gè)重量級對象:

  • 創(chuàng)建線程比較耗時(shí)

  • 線程占用的內(nèi)存也較大

所以,為每個(gè)請求創(chuàng)建一個(gè)新的線程并不適合互聯(lián)網(wǎng)的高并發(fā)場景。

難道TPM只是空想國?如果換一種實(shí)現(xiàn),估計(jì)你會(huì)想到線程池。方向沒問題,但引入線程池也會(huì)增加復(fù)雜度。

換個(gè)角度看問題,語言、工具、框架應(yīng)該是幫助我們更高性能實(shí)現(xiàn)方案的,而不是用來否定方案的,TPM作為一種最簡單的分工方案,Java語言支持不了,顯然是Java語言本身設(shè)計(jì)問題。

Java語言里,Java線程是和操作系統(tǒng)線程一一對應(yīng)的,這種做法本質(zhì)上是將Java線程的調(diào)度權(quán)完全委托給操作系統(tǒng),而操作系統(tǒng)在這方面非常成熟,所以這種做法的好處是穩(wěn)定、可靠,但是也繼承了操作系統(tǒng)線程的缺點(diǎn):創(chuàng)建成本高。為了解決這個(gè)缺點(diǎn),Java并發(fā)包里提供了線程池等工具類。這個(gè)思路在很長一段時(shí)間里都是很穩(wěn)妥的方案,但是這個(gè)方案并不是唯一的方案。

業(yè)界還有另外一種方案:

輕量級線程

該方案在Java領(lǐng)域知名度不高,但和Go里的協(xié)程,本質(zhì)都是一種輕量級線程。其創(chuàng)建成本很低,和創(chuàng)建一個(gè)普通對象類似;并且創(chuàng)建速度和內(nèi)存占用相比os線程至少有一個(gè)數(shù)量級提升,所以基于輕量級線程實(shí)現(xiàn)TPM就完全沒有問題。

Java也意識到輕量級線程的意義,OpenJDK的Loom項(xiàng)目就是要解決Java語言的輕量級線程問題。Loom 中的輕量級線程稱為Fiber。

使用Fiber實(shí)現(xiàn)TPM。

Loom在設(shè)計(jì)輕量級線程時(shí),也充分參考了當(dāng)前Java線程的使用方式,所以學(xué)習(xí)成本還是很低的。只需將new  Thread(()->{…}).start()換成 Fiber.schedule(()->{})。

什么是Thread-Per-Message設(shè)計(jì)模式

在 Java 的高并發(fā)領(lǐng)域,雖然不具備可行性,不過對一些并發(fā)度沒那么高的異步場景,例如定時(shí)任務(wù),采用 TPM完全沒問題。

感謝各位的閱讀,以上就是“什么是Thread-Per-Message設(shè)計(jì)模式”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對什么是Thread-Per-Message設(shè)計(jì)模式這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)頁標(biāo)題:什么是Thread-Per-Message設(shè)計(jì)模式
文章出自:http://chinadenli.net/article22/jieicc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)標(biāo)簽優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、定制網(wǎng)站、建站公司微信公眾號

廣告

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

綿陽服務(wù)器托管