成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

并發(fā)編程領(lǐng)域的Thread-Per-Message設(shè)計(jì)模式到底是什么?

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

[[400312]]

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

  • 同步
  • 互斥
  • 分工

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

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

簡(jiǎn)單說(shuō)說(shuō)Thread-Per-Message模式

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

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

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

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

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

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

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

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

  • 創(chuàng)建線程比較耗時(shí)
  • 線程占用的內(nèi)存也較大

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

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

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

Java語(yǔ)言里,Java線程是和操作系統(tǒng)線程一一對(duì)應(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è)思路在很長(zhǎng)一段時(shí)間里都是很穩(wěn)妥的方案,但是這個(gè)方案并不是唯一的方案。

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

輕量級(jí)線程

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

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

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

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

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

本文轉(zhuǎn)載自微信公眾號(hào)「JavaEdge」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系JavaEdge公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: JavaEdge
相關(guān)推薦

2017-09-07 14:44:10

程序員

2020-10-21 10:54:07

物聯(lián)網(wǎng)商業(yè)技術(shù)

2021-07-01 19:31:50

并發(fā)JavaCPU

2020-03-05 10:28:19

MySQLMRR磁盤(pán)讀

2022-10-08 00:00:00

Spring數(shù)據(jù)庫(kù)項(xiàng)目

2020-10-14 06:22:14

UWB技術(shù)感知

2020-09-27 06:53:57

MavenCDNwrapper

2020-09-22 08:22:28

快充

2010-11-01 01:25:36

Windows NT

2011-04-27 09:30:48

企業(yè)架構(gòu)

2024-02-07 12:35:00

React并發(fā)模式concurrent

2023-10-11 08:29:54

volatileJava原子性

2024-06-07 10:05:31

2009-06-09 22:11:44

JavaScriptObject

2020-10-27 10:26:03

編程開(kāi)發(fā)Java

2021-09-01 23:29:37

Golang語(yǔ)言gRPC

2021-01-21 21:24:34

DevOps開(kāi)發(fā)工具

2021-02-05 10:03:31

區(qū)塊鏈技術(shù)智能

2023-07-12 15:32:49

人工智能AI

2021-07-07 05:07:15

JDKIterator迭代器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产91在线视频 | 欧美天堂| 国产一区二区精品在线观看 | 精品视频一区二区三区在线观看 | 亚洲精品一区中文字幕乱码 | 毛片入口| 日韩国产精品一区二区三区 | 日韩欧美在线免费观看视频 | 日韩视频精品在线 | 国产精品久久精品 | 日韩中出| 色视频一区二区 | 久久99深爱久久99精品 | 一级毛片视频 | 亚洲色图综合 | 特黄av| 国产高清视频在线播放 | 国产一区二区精品在线观看 | 国产一级免费视频 | 欧美在线一区二区三区四区 | 黄色免费网站在线看 | 国产毛片视频 | 久久亚洲国产 | 精品视频一区二区三区在线观看 | 成人精品久久 | 91色视频在线观看 | 久久午夜精品 | 成人免费淫片aa视频免费 | 国产91久久久久久久免费 | 亚洲第一中文字幕 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 中文字幕在线观看一区 | 国产一级黄色网 | 国产成人精品一区二区在线 | 久久国产精品一区二区 | 国产精品99一区二区 | 精品国产伦一区二区三区观看体验 | 中文字幕一级毛片视频 | 国产91网址 | 国产999在线观看 | 日韩一二三区视频 |