日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

理解 Node.js 中的事件循環(huán)

來源: 責(zé)編: 時間:2024-01-08 09:17:28 241觀看
導(dǎo)讀你已經(jīng)使用 Node.js 一段時間了,構(gòu)建了一些應(yīng)用程序,嘗試了不同的模塊,甚至對異步編程感到很舒適。但是有些事情一直在困擾著你——事件循環(huán)(Event Loop)。如果你像我一樣,花費(fèi)了無數(shù)個小時閱讀文檔和觀看視頻,試圖理解事件

你已經(jīng)使用 Node.js 一段時間了,構(gòu)建了一些應(yīng)用程序,嘗試了不同的模塊,甚至對異步編程感到很舒適。但是有些事情一直在困擾著你——事件循環(huán)(Event Loop)。Upz28資訊網(wǎng)——每日最新資訊28at.com

如果你像我一樣,花費(fèi)了無數(shù)個小時閱讀文檔和觀看視頻,試圖理解事件循環(huán)。但即使作為一個經(jīng)驗(yàn)豐富的開發(fā)者,在完全理解它如何工作方面也可能會遇到困難。這就是為什么我準(zhǔn)備了這份視覺指南,幫助您充分理解 Node.js 事件循環(huán)。請坐下來,拿杯咖啡,讓我們深入探索 Node.js 事件循環(huán)的世界吧。Upz28資訊網(wǎng)——每日最新資訊28at.com

JavaScript 中的異步編程

我們將從 JavaScript 中異步編程的復(fù)習(xí)開始。雖然 JavaScript 在 Web、移動和桌面應(yīng)用程序中都有使用,但重要的是要記住,本質(zhì)上,JavaScript 是一種同步、阻塞、單線程的語言。讓我們通過一個簡短的代碼片段來理解這句話。Upz28資訊網(wǎng)——每日最新資訊28at.com

// index.jsfunction A() {  console.log("A");}function B() {  console.log("B");}A()B()// Logs A and then B

JavaScript 是同步的

如果我們有兩個將消息記錄到控制臺的函數(shù),那么代碼會自上而下執(zhí)行,每次只執(zhí)行一行。在上述代碼片段中,我們看到 A 在 B 之前被記錄。Upz28資訊網(wǎng)——每日最新資訊28at.com

JavaScript 是阻塞的

JavaScript 由于其同步性質(zhì)而被阻塞。無論前一個進(jìn)程需要多長時間,后續(xù)進(jìn)程都不會啟動,直到前者完成為止。在代碼片段中,如果函數(shù) A 必須執(zhí)行大量代碼塊,則 JavaScript 必須在沒有轉(zhuǎn)移到函數(shù) B 的情況下完成該操作。即便這塊代碼需要耗時 10 秒甚至 1 分鐘。Upz28資訊網(wǎng)——每日最新資訊28at.com

你可能已經(jīng)在瀏覽器中遇到過這種情況。當(dāng) Web 應(yīng)用程序在瀏覽器中運(yùn)行并且執(zhí)行一些密集的代碼塊而不返回控制權(quán)給瀏覽器時,瀏覽器可能會出現(xiàn)卡死的情況,這就是所謂的阻塞。瀏覽器被阻止繼續(xù)處理用戶輸入和執(zhí)行其他任務(wù),直到 Web 應(yīng)用程序?qū)⑻幚砥骺刂茩?quán)歸還給瀏覽器。Upz28資訊網(wǎng)——每日最新資訊28at.com

JavaScript 是單線程的

線程就是你的 JavaScript 程序可以用來運(yùn)行任務(wù)的進(jìn)程(process)。每個線程一次只能執(zhí)行一個任務(wù)。與其他支持多線程并且可以同時運(yùn)行多個任務(wù)的語言不同,JavaScript 只有一個稱為主線程的線程執(zhí)行代碼。Upz28資訊網(wǎng)——每日最新資訊28at.com

等待 JavaScript

如你所想,這種 JavaScript 模型會帶來問題,因?yàn)槲覀儽仨毜却龜?shù)據(jù)被獲取后才能繼續(xù)執(zhí)行代碼。這個等待可能需要幾秒鐘,在此期間我們無法運(yùn)行任何其他代碼。如果 JavaScript 在不等待的情況下繼續(xù)處理,就會出錯。我們需要在 JavaScript 中實(shí)現(xiàn)異步行為。我們進(jìn)到 Node.js 看一下。Upz28資訊網(wǎng)——每日最新資訊28at.com

Node.js 運(yùn)行時

圖片Upz28資訊網(wǎng)——每日最新資訊28at.com

Node.js 運(yùn)行時是一個環(huán)境,你可以在不使用瀏覽器的情況下使用和運(yùn)行 JavaScript 程序。核心——Node 運(yùn)行時,由三個主要組件組成。Upz28資訊網(wǎng)——每日最新資訊28at.com

  • 外部依賴項(xiàng) —— 例如 V8、libuv、crypto 等——是 Node.js 必需的功能
  • C++ 特性提供了文件系統(tǒng)訪問和網(wǎng)絡(luò)等功能。
  • JavaScript 庫提供了函數(shù)和工具,便于使用 JavaScript 代碼調(diào)用 C++ 特性。

雖然所有部分都很重要,但異步編程在 Node.js 中的關(guān)鍵組件是 libuv。Upz28資訊網(wǎng)——每日最新資訊28at.com

Libuv

Libuv[2] 是一個跨平臺的開源庫,用 C 語言編寫。在 Node.js 運(yùn)行時中,它的作用是提供處理異步操作的支持。我們來看一下它是如何工作的。Upz28資訊網(wǎng)——每日最新資訊28at.com

Node.js 運(yùn)行時中的代碼執(zhí)行

圖片圖片Upz28資訊網(wǎng)——每日最新資訊28at.com

讓我們來概括一下代碼在 Node 運(yùn)行時中的執(zhí)行方式。在執(zhí)行代碼時,位于圖片左側(cè)的 V8 引擎負(fù)責(zé) JavaScript 代碼的執(zhí)行。該引擎包含一個內(nèi)存堆(Memory heap)和一個調(diào)用棧(Call stack)。Upz28資訊網(wǎng)——每日最新資訊28at.com

每當(dāng)聲明變量或函數(shù)時,都會在堆上分配內(nèi)存。執(zhí)行代碼時,函數(shù)就會被推入調(diào)用棧中。當(dāng)函數(shù)返回時,它就從調(diào)用棧中彈出了。這是對棧數(shù)據(jù)結(jié)構(gòu)的簡單實(shí)現(xiàn),最后添加的項(xiàng)是第一個被移除。在圖片右側(cè),是負(fù)責(zé)處理異步方法的 libuv。Upz28資訊網(wǎng)——每日最新資訊28at.com

每當(dāng)我們執(zhí)行異步方法時,libuv 接管任務(wù)的執(zhí)行。然后使用操作系統(tǒng)本地異步機(jī)制運(yùn)行任務(wù)。如果本地機(jī)制不可用或不足,則利用其線程池來運(yùn)行任務(wù),并確保主線程不被阻塞。Upz28資訊網(wǎng)——每日最新資訊28at.com

同步代碼執(zhí)行

首先,讓我們來看一下同步代碼執(zhí)行。以下代碼由三個控制臺日志語句組成,依次記錄“First”,“Second”和“Third”。我們按照運(yùn)行時執(zhí)行順序來查看代碼。Upz28資訊網(wǎng)——每日最新資訊28at.com

// index.jsconsole.log("First");console.log("Second");console.log("Third");

以下是 Node 運(yùn)行時執(zhí)行同步代碼的可視化展示。Upz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Upz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Upz28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行的主線程始終從全局作用域開始。全局函數(shù)(如果我們可以這樣稱呼它)被推入堆棧中。然后,在第 1 行,我們有一個控制臺日志語句。這個函數(shù)被推入堆棧中。假設(shè)這個發(fā)生在 1 毫秒時,“First” 被記錄在控制臺上。然后,這個函數(shù)從堆棧中彈出。Upz28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行到第 2 行時。假設(shè)到第 2 毫秒了,log 函數(shù)再次被推入堆棧中。“Second”被記錄在控制臺上,并彈出該函數(shù)。Upz28資訊網(wǎng)——每日最新資訊28at.com

最后,執(zhí)行到第 3 行了。第 3 毫秒時,log 函數(shù)被推入堆棧,“Third”將記錄在控制臺上,并彈出該函數(shù)。此時已經(jīng)沒有代碼要執(zhí)行,全局也被彈出。Upz28資訊網(wǎng)——每日最新資訊28at.com

異步代碼執(zhí)行

接下來,讓我們看一下異步代碼執(zhí)行。有以下代碼片段:包含三個日志語句,但這次第二個日志語句傳遞給了fs.readFile() 作為回調(diào)函數(shù)。Upz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Upz28資訊網(wǎng)——每日最新資訊28at.com

圖片Upz28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行的主線程始終從全局作用域開始。全局函數(shù)被推入堆棧。然后執(zhí)行到第 1 行,在第 1 毫秒時,“First”被記錄在控制臺中,并彈出該函數(shù)。然后執(zhí)行移動到第 2 行,在第 2毫秒時,readFile 方法被推入堆棧。由于 readFile 是異步操作,因此它會轉(zhuǎn)移(off-loaded)到 libuv。Upz28資訊網(wǎng)——每日最新資訊28at.com

JavaScript 從調(diào)用堆棧中彈出了 readFile 方法,因?yàn)榫偷?2 行的執(zhí)行而言,它的工作已經(jīng)完成了。在后臺,libuv 開始在單獨(dú)的線程上讀取文件內(nèi)容。在第 3 毫秒時,JavaScript 繼續(xù)進(jìn)行到第 5 行,將 log 函數(shù)推入堆棧,“Third”被記錄到控制臺中,并將該函數(shù)彈出堆棧。Upz28資訊網(wǎng)——每日最新資訊28at.com

大約在第 4 毫秒左右,假設(shè)文件讀取任務(wù)已經(jīng)完成,則相關(guān)回調(diào)函數(shù)現(xiàn)在會在調(diào)用棧上執(zhí)行, 在回調(diào)函數(shù)內(nèi)部遇到 log 函數(shù)。Upz28資訊網(wǎng)——每日最新資訊28at.com

log 函數(shù)推入到到調(diào)用棧,“Second”被記錄到控制臺并彈出 log 函數(shù) 。由于回調(diào)函數(shù)中沒有更多要執(zhí)行的語句,因此也被彈出 。沒有更多代碼可運(yùn)行了 ,所以全局函數(shù)也從堆棧中刪除 。Upz28資訊網(wǎng)——每日最新資訊28at.com

控制臺輸出“First”,“Third”,然后是“Second”。Upz28資訊網(wǎng)——每日最新資訊28at.com

Libuv 和異步操作

很明顯,libuv 用于處理 Node.js 中的異步操作。對于像處理網(wǎng)絡(luò)請求這樣的異步操作,libuv 依賴于操作系統(tǒng)原生機(jī)制。對于沒有本地 OS 支持的異步讀取文件的操作,libuv 則依賴其線程池以確保主線程不被阻塞。然而,這也引發(fā)了一些問題。Upz28資訊網(wǎng)——每日最新資訊28at.com

  • 當(dāng)一個異步任務(wù)在 libuv 中完成時,什么時候 Node 會在調(diào)用棧上運(yùn)行相關(guān)聯(lián)的回調(diào)函數(shù)?
  • Node 是否會等待調(diào)用棧為空后再運(yùn)行回調(diào)函數(shù)?還是打斷正常執(zhí)行流來運(yùn)行回調(diào)函數(shù)?
  • 像 setTimeout 和 setInterval 這類延遲執(zhí)行回調(diào)函數(shù)的方法又是何時執(zhí)行回調(diào)函數(shù)呢?
  • 如果 setTimeout 和 readFile 這類異步任務(wù)同時完成,Node 如何決定哪個回調(diào)函數(shù)先在調(diào)用棧上運(yùn)行?其中一個會有更多的優(yōu)先級嗎?

所有這些問題都可以通過理解 libuv 核心部分——事件循環(huán)來得到答案。Upz28資訊網(wǎng)——每日最新資訊28at.com

什么是事件循環(huán)?

從技術(shù)上講,事件循環(huán)只是一個 C 語言程序。但是在 Node.js 中,你可以將其視為一種設(shè)計模式,用于協(xié)調(diào)同步和異步代碼的執(zhí)行。Upz28資訊網(wǎng)——每日最新資訊28at.com

可視化事件循環(huán)

事件循環(huán)是一個循環(huán),只要你的 Node.js 應(yīng)用程序在運(yùn)行,它就一直運(yùn)行。每個循環(huán)中有六個不同的隊(duì)列,每個隊(duì)列都包含一個或多個需要最終在調(diào)用堆棧上執(zhí)行的回調(diào)函數(shù)。Upz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Upz28資訊網(wǎng)——每日最新資訊28at.com

  • 首先,有一個計時器隊(duì)列(timer queue。技術(shù)上叫最小堆(min-heap)),它保存與 setTimeout 和 setInterval 相關(guān)的回調(diào)函數(shù)。
  • 其次,有一個 I/O 隊(duì)列(I/O queue),其中包含與所有異步方法相關(guān)的回調(diào)函數(shù),例如 fs 和 http 模塊中提供的相關(guān)方法。
  • 第三個是檢查隊(duì)列(check queue),它保存與 setImmediate 函數(shù)相關(guān)的回調(diào)函數(shù),這是特定于Node 的功能。
  • 第四個是關(guān)閉隊(duì)列(close queue),它保存與異步任務(wù)關(guān)閉事件相關(guān)聯(lián)的回調(diào)函數(shù)。

最后,有兩個不同隊(duì)列組成微任務(wù)隊(duì)列(microtask queue)。Upz28資訊網(wǎng)——每日最新資訊28at.com

  • nextTick 隊(duì)列保存了與 process.nextTick 函數(shù)關(guān)聯(lián)的回調(diào)函數(shù)。
  • Promise 隊(duì)列則保存了JavaScript 中本地 Promise 相關(guān)聯(lián)的回調(diào)函數(shù)。

需要注意的是計時器、I/O、檢查和關(guān)閉隊(duì)列都屬于 libuv。然而,兩個微任務(wù)隊(duì)列并不屬于 libuv。盡管如此,它們?nèi)匀皇?Node 運(yùn)行時環(huán)境中扮演著重要角色,并且在執(zhí)行回調(diào)順序方面發(fā)揮著重要作用。說到這里, 讓我們來理解一下事件循環(huán)是如何工作的。Upz28資訊網(wǎng)——每日最新資訊28at.com

事件循環(huán)是如何工作的?

圖中箭頭是一個提示,但可能還不太容易理解。讓我來解釋一下隊(duì)列的優(yōu)先級順序。首先要知道,所有用戶編寫的同步 JavaScript 代碼都比異步代碼優(yōu)先級更高。這表示只有在調(diào)用堆棧為空時,事件循環(huán)才會發(fā)揮作用。Upz28資訊網(wǎng)——每日最新資訊28at.com

在事件循環(huán)中,執(zhí)行順序遵循某些規(guī)則。需要掌握的規(guī)則還是有一些的,我們逐個的了解一下:Upz28資訊網(wǎng)——每日最新資訊28at.com

  1. 執(zhí)行微任務(wù)隊(duì)列(microtask queue)中的所有回調(diào)函數(shù)。首先是 nextTick 隊(duì)列中的任務(wù),然后是 Promise 隊(duì)列中的任務(wù)。
  2. 執(zhí)行計時器隊(duì)列(timer queue)內(nèi)的所有回調(diào)函數(shù)。
  3. 如果微任務(wù)隊(duì)列中存在回調(diào)函數(shù),則在計時器隊(duì)列內(nèi)每執(zhí)行完一次回調(diào)函數(shù)之后執(zhí)行微任務(wù)隊(duì)列中的所有回調(diào)函數(shù)。首先是 nextTick 隊(duì)列中的任務(wù),然后是 Promise 隊(duì)列中的任務(wù)。
  4. 執(zhí)行 I/O 隊(duì)列(I/O queue)內(nèi)的所有回調(diào)函數(shù)。
  5. 如果微任務(wù)隊(duì)列中存在回調(diào)函數(shù),按照先 nextTick 隊(duì)列后 Promise 隊(duì)列的順序依次執(zhí)行微任務(wù)隊(duì)列中的所有回調(diào)函數(shù)。
  6. 執(zhí)行檢查隊(duì)列(check queue)內(nèi)的所有回調(diào)函數(shù)。
  7. 如果微任務(wù)隊(duì)列中存在回調(diào)函數(shù),則在檢查隊(duì)列內(nèi)每個回調(diào)之后執(zhí)行微任務(wù)隊(duì)列中的所有回調(diào)函數(shù) 。首先是 nextTick 隊(duì)列中的任務(wù),然后是 Promise 隊(duì)列中的任務(wù)。
  8. 執(zhí)行關(guān)閉隊(duì)列(close queue)內(nèi)的所有回調(diào)函數(shù)。
  9. 在同一循環(huán)的最后,再執(zhí)行一次微任務(wù)隊(duì)列。首先是 nextTick 隊(duì)列中的任務(wù),然后是 Promise 隊(duì)列中的任務(wù)。

此時,如果還有更多的回調(diào)需要處理,那么事件循環(huán)再運(yùn)行一次(譯注:事件循環(huán)在程序運(yùn)行期間一直在運(yùn)行,在當(dāng)前沒有可供處理的任務(wù)情況下,會處于等待狀態(tài),一旦有新任務(wù)就會執(zhí)行),并重復(fù)相同的步驟。另一方面,如果所有回調(diào)都已執(zhí)行并且沒有更多代碼要處理(譯注:也就是程序執(zhí)行結(jié)束),則事件循環(huán)退出。Upz28資訊網(wǎng)——每日最新資訊28at.com

這就是 libuv 事件循環(huán)在 Node.js 中執(zhí)行異步代碼的作用。有了這些規(guī)則,我們可以重新審視之前提出的問題。Upz28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)一個異步任務(wù)在 libuv 中完成時,什么時候 Node 會在調(diào)用棧上運(yùn)行相關(guān)聯(lián)的回調(diào)函數(shù)?Upz28資訊網(wǎng)——每日最新資訊28at.com

答案:只有當(dāng)調(diào)用棧為空時才執(zhí)行回調(diào)函數(shù)。Upz28資訊網(wǎng)——每日最新資訊28at.com

Node 是否會等待調(diào)用棧為空后再運(yùn)行回調(diào)函數(shù)?還是打斷正常執(zhí)行流來運(yùn)行回調(diào)函數(shù)?Upz28資訊網(wǎng)——每日最新資訊28at.com

答案:運(yùn)行回調(diào)函數(shù)時不會打斷正常執(zhí)行流。Upz28資訊網(wǎng)——每日最新資訊28at.com

像 setTimeout 和 setInterval 這類延遲執(zhí)行回調(diào)函數(shù)的方法又是何時執(zhí)行回調(diào)函數(shù)呢?Upz28資訊網(wǎng)——每日最新資訊28at.com

答案:*setTimeout 和 setInterval 的所有回調(diào)函數(shù)中第一優(yōu)先級執(zhí)行的(不考慮微任務(wù)隊(duì)列)。*Upz28資訊網(wǎng)——每日最新資訊28at.com

如果兩個異步任務(wù)(例如 setTimeout 和 readFile)同時完成,Node 如何決定那個回調(diào)函數(shù)先在調(diào)用棧中執(zhí)行?其中一個會比另一個有更高優(yōu)先權(quán)嗎?Upz28資訊網(wǎng)——每日最新資訊28at.com

答案:在同時完成的情況下,計時器回調(diào)會先于 I/O 回調(diào)執(zhí)行。Upz28資訊網(wǎng)——每日最新資訊28at.com

到此為止我們學(xué)了很多,但我希望大家可以把下面這張圖片展現(xiàn)的執(zhí)行順序銘記于心,因?yàn)樗暾谋憩F(xiàn)了 Node.js 在幕后是如何執(zhí)行異步代碼的。Upz28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Upz28資訊網(wǎng)——每日最新資訊28at.com

結(jié)論

事件循環(huán)是 Node.js 的基本組成部分,通過確保主線程不被阻塞來實(shí)現(xiàn)異步編程。了解事件循環(huán)的工作原理可能具有挑戰(zhàn)性,但對于構(gòu)建高效應(yīng)用程序至關(guān)重要。Upz28資訊網(wǎng)——每日最新資訊28at.com

這個視覺指南涵蓋了 JavaScript 中異步編程、Node.js 運(yùn)行時和負(fù)責(zé)處理異步操作的 libuv 的基礎(chǔ)知識。有了這些知識,你可以建立一個強(qiáng)大的事件循環(huán)模型,在編寫利用 Node.js 異步特性的代碼時受益。Upz28資訊網(wǎng)——每日最新資訊28at.com

參考資料

[1]A Complete Visual Guide to Understanding the Node.js Event Loop:https://www.builder.io/blog/visual-guide-to-nodejs-event-loopUpz28資訊網(wǎng)——每日最新資訊28at.com

[2]Libuv:https://libuv.org/Upz28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-57911-0.html理解 Node.js 中的事件循環(huán)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 詳解SpringMVC底層原理

下一篇: React與Vue性能對比:兩大前端框架的性能

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機(jī)基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據(jù)博主數(shù)碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 印度登月最關(guān)鍵一步!月船三號今晚進(jìn)入環(huán)月軌道

    8月5日消息,據(jù)印度官方消息,月船三號將于北京時間今晚21時30分左右開始近月制動進(jìn)入環(huán)月軌道。這是該探測器能夠成功的最關(guān)鍵步驟之一,如果成功將開始圍
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實(shí)現(xiàn)了一個流處理程序
  • 一年經(jīng)驗(yàn)在二線城市面試后端的經(jīng)驗(yàn)分享

    忠告這篇文章只適合2年內(nèi)工作經(jīng)驗(yàn)、甚至沒有工作經(jīng)驗(yàn)的朋友閱讀。如果你是2年以上工作經(jīng)驗(yàn),請果斷劃走,對你沒啥幫助~主人公這篇文章內(nèi)容來自 「升職加薪」星球星友 的投稿,坐
  • Flowable工作流引擎的科普與實(shí)踐

    一.引言當(dāng)我們在日常工作和業(yè)務(wù)中需要進(jìn)行各種審批流程時,可能會面臨一系列技術(shù)和業(yè)務(wù)上的挑戰(zhàn)。手動處理這些審批流程可能會導(dǎo)致開發(fā)成本的增加以及業(yè)務(wù)復(fù)雜度的上升。在這
  • 三萬字盤點(diǎn) Spring 九大核心基礎(chǔ)功能

    大家好,我是三友~~今天來跟大家聊一聊Spring的9大核心基礎(chǔ)功能。話不多說,先上目錄:圖片友情提示,本文過長,建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個核心的基礎(chǔ)功能,不
  • 認(rèn)真聊聊東方甄選:如何告別低垂的果實(shí)

    來源:山核桃作者:財經(jīng)無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關(guān)心的“網(wǎng)紅”。7月5日至9日,為期5天的東方甄選“甘肅行”首次在自有App內(nèi)直播,
  • 華為HarmonyOS 4升級計劃公布:首批34款機(jī)型今日開啟公測

    8月4日消息,今天下午華為正式發(fā)布了HarmonyOS 4系統(tǒng),在更流暢的前提下,還帶來了不少新功能,UI設(shè)計也有變化,會讓手機(jī)煥然一新。華為宣布,首批機(jī)型將會在
  • AMD的AI芯片轉(zhuǎn)單給三星可能性不大 與臺積電已合作至2nm制程

    據(jù) DIGITIMES 消息,英偉達(dá) AI GPU 出貨逐季飆升,接下來 AMD MI 300 系列將在第 4 季底量產(chǎn)。而半導(dǎo)體業(yè)內(nèi)人士表示,近日傳出 AMD 的 AI 芯片將轉(zhuǎn)單給
Top 主站蜘蛛池模板: 富宁县| 克拉玛依市| 建平县| 繁昌县| 商河县| 清丰县| 建昌县| 双鸭山市| 迁安市| 田阳县| 扎鲁特旗| 咸宁市| 花莲县| 阿拉善盟| 汕头市| 凤山市| 宝鸡市| 博湖县| 枣强县| 柏乡县| 辽阳县| 宁国市| 南京市| 如皋市| 太原市| 怀柔区| 朝阳县| 巴里| 桂东县| 清新县| 道真| 湟源县| 辉县市| 万载县| 房产| 龙陵县| 怀来县| 宜章县| 韩城市| 嵊泗县| 临桂县|