韩国资源视频一区二区三区,午夜私人影院粉色视频我要,99国产高清久久久久久网站,久久国内精品自在自线观看,国产青榴在线观看视频

Internet Develppment
互聯(lián)網(wǎng)開(kāi)發(fā)& 推廣服務(wù)提供商

我們擅長(cháng)商業(yè)策略與用戶(hù)體驗的完美結合。

歡迎瀏覽我們的案例。

首頁(yè) > 新聞中心 > 新聞動(dòng)態(tài) > 正文

屬于Java的協(xié)程終于來(lái)了!

發(fā)布時(shí)間:2022-04-09 08:56:23來(lái)源:OSC開(kāi)源社區

  OpenJDK 的 JEP 425 :虛擬線(xiàn)程(預覽版)功能提案顯示:Java 平臺將引入虛擬線(xiàn)程特性(期待已久的協(xié)程)。虛擬線(xiàn)程是輕量級線(xiàn)程,可顯著(zhù)地減少編寫(xiě)、維護和觀(guān)察高吞吐量并發(fā)應用程序的工作量。

  Java 開(kāi)發(fā)人員一直依賴(lài)線(xiàn)程作為并發(fā)服務(wù)器應用程序的構建塊,每個(gè)方法中的語(yǔ)句都在一個(gè)線(xiàn)程內執行,每個(gè)線(xiàn)程提供一個(gè)堆棧來(lái)存儲局部變量和協(xié)調方法調用,以及報錯時(shí)的上下文捕獲。線(xiàn)程是 Java 的并發(fā)單元,也是 Java 工具的核心基礎:調試器逐步執行線(xiàn)程方法中的語(yǔ)句,分析器則可視化多個(gè)線(xiàn)程的行為。
  目前,JDK 將其平臺線(xiàn)程實(shí)現為操作系統 (OS) 線(xiàn)程的包裝器,JDK 中每個(gè)實(shí)例都是一個(gè)平臺線(xiàn)程,平臺線(xiàn)程在底層操作系統線(xiàn)程上運行 Java 代碼 ,并在代碼的整個(gè)生命周期內捕獲 OS 線(xiàn)程。平臺線(xiàn)程數受限于 OS 線(xiàn)程數,而 OS 線(xiàn)程的成本很高,不能占用太多。因此,目前 JDK 的這種線(xiàn)程實(shí)現方法限制了其應用程序的吞吐量,使吞吐量遠低于硬件支持的水平。
  關(guān)于虛擬線(xiàn)程
  
  虛擬線(xiàn)程java.lang.Thread是在底層操作系統線(xiàn)程(OS 線(xiàn)程)上運行 Java 代碼,但在代碼的整個(gè)生命周期內不捕獲 OS 線(xiàn)程的實(shí)例。這意味著(zhù)許多虛擬線(xiàn)程可以在同一個(gè) OS 線(xiàn)程上運行 Java 代碼,從而有效地共享它。
  
  虛擬線(xiàn)程是由 JDK 而不是操作系統提供的線(xiàn)程的輕量級實(shí)現,也是用戶(hù)模式線(xiàn)程的一種形式。用戶(hù)模式線(xiàn)程在 Java 的早期版本中被稱(chēng)為“綠色線(xiàn)程”,當時(shí)操作系統線(xiàn)程的概念還不夠成熟和普及, Java 的所有綠色線(xiàn)程都共享一個(gè) OS 線(xiàn)程(M:1 調度),隨著(zhù)線(xiàn)程概念的發(fā)展,綠色線(xiàn)程最終被現在的平臺線(xiàn)程超越,實(shí)現為 OS 線(xiàn)程的包裝器(1:1 調度),而最新引入的虛擬線(xiàn)程采用 M:N 調度,其中大量 (M) 虛擬線(xiàn)程被調度為在較少數量 (N) 的 OS 線(xiàn)程上運行。
  
  更高的吞吐量
  
  開(kāi)發(fā)者可以選擇使用虛擬線(xiàn)程還是平臺線(xiàn)程,但虛擬線(xiàn)程在高吞吐量的服務(wù)器應用程序中表現更好。比如下面這段休眠一秒鐘的代碼就創(chuàng )建了大量的虛擬線(xiàn)程,程序首先獲得一個(gè) ExecutorService,它為每個(gè)提交的任務(wù)創(chuàng )建一個(gè)新的虛擬線(xiàn)程,然后提交 10000 個(gè)任務(wù)并等待所有任務(wù)完成:
  現代硬件可以很容易地支持 10000 個(gè)虛擬線(xiàn)程同時(shí)運行這樣的代碼。如果該程序使用為每個(gè)任務(wù)都創(chuàng )建一個(gè)新平臺線(xiàn)程的 ExecutorService,例如 Executors.newCachedThreadPool() , 那么它將嘗試創(chuàng )建 10000 個(gè)平臺線(xiàn)程,也就意味著(zhù) 10000 個(gè) OS 線(xiàn)程,那么這個(gè)程序在大多數操作系統上都會(huì )崩潰。又或者這個(gè)程序使用從池中獲取平臺線(xiàn)程的 ExecutorService,如 Executors.newFixedThreadPool(200),也好不到哪去。ExecutorService 將創(chuàng )建 200 個(gè)平臺線(xiàn)程供這 10000 個(gè)任務(wù)共享,任務(wù)將按順序運行而不是同時(shí)運行,程序需要很長(cháng)時(shí)間才能跑完。
  
  對于上述程序來(lái)說(shuō),具有 200 個(gè)平臺線(xiàn)程的池只能實(shí)現每秒 200 個(gè)任務(wù)的吞吐量,而虛擬線(xiàn)程可以實(shí)現大約每秒 10000 個(gè)任務(wù)的吞吐量(在充分預熱之后)。此外,如果將示例程序中的 10000 更改為 1,000,000 ,則程序將提交 1,000,000 個(gè)任務(wù),創(chuàng )建 1,000,000 個(gè)并發(fā)運行的虛擬線(xiàn)程,并且(在充分預熱后)達到大約 1,000,000 個(gè)任務(wù)/秒的吞吐量。
  
  總而言之,虛擬線(xiàn)程不是更快的線(xiàn)程 —— 它們運行代碼的速度并不比平臺線(xiàn)程快。它們的存在是為了提供規模(更高的吞吐量),而不是速度(更低的延遲)。
  
  如何啟用虛擬線(xiàn)程?
  
  目前虛擬線(xiàn)程在其他多線(xiàn)程語(yǔ)言中被廣泛使用(例如 Go 中的協(xié)程 和 Erlang 中的進(jìn)程,在 C++ 中也是一個(gè)穩定特性),但在 Java 中還是一個(gè)預覽 API,默認禁用。如要在 JDK XX 上嘗試該功能,則必須通過(guò)以下方法啟用預覽 API:
  
  使用 javac --release XX --enable-preview Main.java 編譯程序,并使用 java --enable-preview Main 運行
  
  使用源代碼啟動(dòng)器時(shí),使用 java --release XX --enable-preview Main.java 運行程序
  
  使用 jshell 時(shí),用 jshell --enable-preview 啟動(dòng)
  
  有關(guān)虛擬線(xiàn)程的更多信息可在 OpenJDK 的 JDK Issue-8277131 中查看,目前該提案于 2021/11/15 創(chuàng )立,目前還處于 JEP 流程的第一階段,距離穩定版本還需要一段時(shí)間。
 ?。?a href="http://www.cki5.com/wechat/">邯鄲小程序開(kāi)發(fā))


最新資訊
? 2018 河北碼上網(wǎng)絡(luò )科技有限公司 版權所有 冀ICP備18021892號-1   
? 2018 河北碼上科技有限公司 版權所有.
韩国资源视频一区二区三区,午夜私人影院粉色视频我要,99国产高清久久久久久网站,久久国内精品自在自线观看,国产青榴在线观看视频