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

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

看一遍就理解:IO模型詳解

來源: 責(zé)編: 時(shí)間:2024-03-26 09:35:23 172觀看
導(dǎo)讀前言大家好,我是程序員田螺。今天我們一起來學(xué)習(xí)IO模型。在本文開始前呢,先問問大家?guī)讉€(gè)問題哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步異步IO?什么是IO多路復(fù)用?select/epoll跟IO模型有什么關(guān)系?有幾種經(jīng)典IO模型呢?BIO、

前言

大家好,我是程序員田螺。今天我們一起來學(xué)習(xí)IO模型。在本文開始前呢,先問問大家?guī)讉€(gè)問題哈~0Eh28資訊網(wǎng)——每日最新資訊28at.com

什么是IO呢?什么是阻塞非阻塞IO?什么是同步異步IO?什么是IO多路復(fù)用?select/epoll跟IO模型有什么關(guān)系?有幾種經(jīng)典IO模型呢?BIO、NIO、AIO到底有什么區(qū)別的?0Eh28資訊網(wǎng)——每日最新資訊28at.com

如果這些問題,你都能很好答上的話,那恭喜你,你對(duì)IO的掌握已經(jīng)很棒啦!那你跟田螺哥一起看完這篇文章,再復(fù)習(xí)一下,加深印象吧~如果你對(duì)這些問題模棱兩可的話,那也沒關(guān)系,看完這篇文章,就理解啦!0Eh28資訊網(wǎng)——每日最新資訊28at.com

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

什么是IO呢?

IO,英文全稱是Input/Output,翻譯過來就是輸入/輸出。平時(shí)我們聽得挺多,就是什么磁盤IO,網(wǎng)絡(luò)IO。那IO到底是什么呢?是不是有種懵懵懂懂的感覺呀,好像大概知道它是什么,又好像說不清楚。0Eh28資訊網(wǎng)——每日最新資訊28at.com

IO,即輸入/輸出,到底誰是輸入?誰是輸出呢?IO如果脫離了主體,就會(huì)讓人疑惑。0Eh28資訊網(wǎng)——每日最新資訊28at.com

計(jì)算機(jī)角度的IO

我們常說的輸入輸出,比較直觀的意思就是計(jì)算機(jī)的輸入輸出,計(jì)算機(jī)就是主體。大家是否還記得,大學(xué)學(xué)計(jì)算機(jī)組成原理的時(shí)候,有個(gè)馮.諾依曼結(jié)構(gòu),它將計(jì)算機(jī)分成分為5個(gè)部分:運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備、輸出設(shè)備。0Eh28資訊網(wǎng)——每日最新資訊28at.com

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

輸入設(shè)備是向計(jì)算機(jī)輸入數(shù)據(jù)和信息的設(shè)備,鍵盤,鼠標(biāo)都屬于輸入設(shè)備;輸出設(shè)備是計(jì)算機(jī)硬件系統(tǒng)的終端設(shè)備,用于接收計(jì)算機(jī)數(shù)據(jù)的輸出顯示,一般顯示器、打印機(jī)屬于輸出設(shè)備。0Eh28資訊網(wǎng)——每日最新資訊28at.com

例如你在鼠標(biāo)鍵盤敲幾下,它就會(huì)把你的指令數(shù)據(jù),傳給主機(jī),主機(jī)通過運(yùn)算后,把返回的數(shù)據(jù)信息,輸出到顯示器。0Eh28資訊網(wǎng)——每日最新資訊28at.com

鼠標(biāo)、顯示器這只是直觀表面的輸入輸出,回到計(jì)算機(jī)架構(gòu)來說,涉及計(jì)算機(jī)核心與其他設(shè)備間數(shù)據(jù)遷移的過程,就是IO。如磁盤IO,就是從磁盤讀取數(shù)據(jù)到內(nèi)存,這算一次輸入,對(duì)應(yīng)的,將內(nèi)存中的數(shù)據(jù)寫入磁盤,就算輸出。這就是IO的本質(zhì)。0Eh28資訊網(wǎng)——每日最新資訊28at.com

操作系統(tǒng)的IO

我們要將內(nèi)存中的數(shù)據(jù)寫入到磁盤的話,主體會(huì)是什么呢?主體可能是一個(gè)應(yīng)用程序,比如一個(gè)Java進(jìn)程(假設(shè)網(wǎng)絡(luò)傳來二進(jìn)制流,一個(gè)Java進(jìn)程可以把它寫入到磁盤)。0Eh28資訊網(wǎng)——每日最新資訊28at.com

操作系統(tǒng)負(fù)責(zé)計(jì)算機(jī)的資源管理和進(jìn)程的調(diào)度。我們電腦上跑著的應(yīng)用程序,其實(shí)是需要經(jīng)過操作系統(tǒng),才能做一些特殊操作,如磁盤文件讀寫、內(nèi)存的讀寫等等。因?yàn)檫@些都是比較危險(xiǎn)的操作,不可以由應(yīng)用程序亂來,只能交給底層操作系統(tǒng)來。也就是說,你的應(yīng)用程序要把數(shù)據(jù)寫入磁盤,只能通過調(diào)用操作系統(tǒng)開放出來的API來操作。0Eh28資訊網(wǎng)——每日最新資訊28at.com

  • 什么是用戶空間?什么是內(nèi)核空間?
  • 以32位操作系統(tǒng)為例,它為每一個(gè)進(jìn)程都分配了4G(2的32次方)的內(nèi)存空間。這4G可訪問的內(nèi)存空間分為二部分,一部分是用戶空間,一部分是內(nèi)核空間。內(nèi)核空間是操作系統(tǒng)內(nèi)核訪問的區(qū)域,是受保護(hù)的內(nèi)存空間,而用戶空間是用戶應(yīng)用程序訪問的內(nèi)存區(qū)域。

我們應(yīng)用程序是跑在用戶空間的,它不存在實(shí)質(zhì)的IO過程,真正的IO是在操作系統(tǒng)執(zhí)行的。即應(yīng)用程序的IO操作分為兩種動(dòng)作:IO調(diào)用和IO執(zhí)行。IO調(diào)用是由進(jìn)程(應(yīng)用程序的運(yùn)行態(tài))發(fā)起,而IO執(zhí)行是操作系統(tǒng)內(nèi)核的工作。此時(shí)所說的IO是應(yīng)用程序?qū)Σ僮飨到y(tǒng)IO功能的一次觸發(fā),即IO調(diào)用。0Eh28資訊網(wǎng)——每日最新資訊28at.com

操作系統(tǒng)的一次IO過程

應(yīng)用程序發(fā)起的一次IO操作包含兩個(gè)階段:0Eh28資訊網(wǎng)——每日最新資訊28at.com

  • IO調(diào)用:應(yīng)用程序進(jìn)程向操作系統(tǒng)內(nèi)核發(fā)起調(diào)用。
  • IO執(zhí)行:操作系統(tǒng)內(nèi)核完成IO操作。

操作系統(tǒng)內(nèi)核完成IO操作還包括兩個(gè)過程:0Eh28資訊網(wǎng)——每日最新資訊28at.com

  • 準(zhǔn)備數(shù)據(jù)階段:內(nèi)核等待I/O設(shè)備準(zhǔn)備好數(shù)據(jù)
  • 拷貝數(shù)據(jù)階段:將數(shù)據(jù)從內(nèi)核緩沖區(qū)拷貝到用戶進(jìn)程緩沖區(qū)

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

其實(shí)IO就是把進(jìn)程的內(nèi)部數(shù)據(jù)轉(zhuǎn)移到外部設(shè)備,或者把外部設(shè)備的數(shù)據(jù)遷移到進(jìn)程內(nèi)部。外部設(shè)備一般指硬盤、socket通訊的網(wǎng)卡。一個(gè)完整的IO過程包括以下幾個(gè)步驟:0Eh28資訊網(wǎng)——每日最新資訊28at.com

  • 應(yīng)用程序進(jìn)程向操作系統(tǒng)發(fā)起IO調(diào)用請求
  • 操作系統(tǒng)準(zhǔn)備數(shù)據(jù),把IO外部設(shè)備的數(shù)據(jù),加載到內(nèi)核緩沖區(qū)
  • 操作系統(tǒng)拷貝數(shù)據(jù),即將內(nèi)核緩沖區(qū)的數(shù)據(jù),拷貝到用戶進(jìn)程緩沖區(qū)

阻塞IO模型

我們已經(jīng)知道IO是什么啦,那什么是阻塞IO呢?0Eh28資訊網(wǎng)——每日最新資訊28at.com

假設(shè)應(yīng)用程序的進(jìn)程發(fā)起IO調(diào)用,但是如果內(nèi)核的數(shù)據(jù)還沒準(zhǔn)備好的話,那應(yīng)用程序進(jìn)程就一直在阻塞等待,一直等到內(nèi)核數(shù)據(jù)準(zhǔn)備好了,從內(nèi)核拷貝到用戶空間,才返回成功提示,此次IO操作,稱之為阻塞IO。0Eh28資訊網(wǎng)——每日最新資訊28at.com

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

  • 阻塞IO比較經(jīng)典的應(yīng)用就是阻塞socket、Java BIO。
  • 阻塞IO的缺點(diǎn)就是:如果內(nèi)核數(shù)據(jù)一直沒準(zhǔn)備好,那用戶進(jìn)程將一直阻塞,浪費(fèi)性能,可以使用非阻塞IO優(yōu)化。

非阻塞IO模型

如果內(nèi)核數(shù)據(jù)還沒準(zhǔn)備好,可以先返回錯(cuò)誤信息給用戶進(jìn)程,讓它不需要等待,而是通過輪詢的方式再來請求。這就是非阻塞IO,流程圖如下:0Eh28資訊網(wǎng)——每日最新資訊28at.com

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

非阻塞IO的流程如下:0Eh28資訊網(wǎng)——每日最新資訊28at.com

  • 應(yīng)用進(jìn)程向操作系統(tǒng)內(nèi)核,發(fā)起recvfrom讀取數(shù)據(jù)。
  • 操作系統(tǒng)內(nèi)核數(shù)據(jù)沒有準(zhǔn)備好,立即返回EWOULDBLOCK錯(cuò)誤碼。
  • 應(yīng)用程序進(jìn)程輪詢調(diào)用,繼續(xù)向操作系統(tǒng)內(nèi)核發(fā)起recvfrom讀取數(shù)據(jù)。
  • 操作系統(tǒng)內(nèi)核數(shù)據(jù)準(zhǔn)備好了,從內(nèi)核緩沖區(qū)拷貝到用戶空間。
  • 完成調(diào)用,返回成功提示。

非阻塞IO模型,簡稱NIO,Non-Blocking IO。它相對(duì)于阻塞IO,雖然大幅提升了性能,但是它依然存在性能問題,即頻繁的輪詢,導(dǎo)致頻繁的系統(tǒng)調(diào)用,同樣會(huì)消耗大量的CPU資源。可以考慮IO復(fù)用模型,去解決這個(gè)問題。0Eh28資訊網(wǎng)——每日最新資訊28at.com

IO多路復(fù)用模型

既然NIO無效的輪詢會(huì)導(dǎo)致CPU資源消耗,我們等到內(nèi)核數(shù)據(jù)準(zhǔn)備好了,主動(dòng)通知應(yīng)用進(jìn)程再去進(jìn)行系統(tǒng)調(diào)用,那不就好了嘛?0Eh28資訊網(wǎng)——每日最新資訊28at.com

在這之前,我們先來復(fù)習(xí)下,什么是文件描述符fd(File Descriptor),它是計(jì)算機(jī)科學(xué)中的一個(gè)術(shù)語,形式上是一個(gè)非負(fù)整數(shù)。當(dāng)程序打開一個(gè)現(xiàn)有文件或者創(chuàng)建一個(gè)新文件時(shí),內(nèi)核向進(jìn)程返回一個(gè)文件描述符。0Eh28資訊網(wǎng)——每日最新資訊28at.com

IO復(fù)用模型核心思路:系統(tǒng)給我們提供一類函數(shù)(如我們耳濡目染的select、poll、epoll函數(shù)),它們可以同時(shí)監(jiān)控多個(gè)fd的操作,任何一個(gè)返回內(nèi)核數(shù)據(jù)就緒,應(yīng)用進(jìn)程再發(fā)起recvfrom系統(tǒng)調(diào)用。0Eh28資訊網(wǎng)——每日最新資訊28at.com

IO多路復(fù)用之select

應(yīng)用進(jìn)程通過調(diào)用select函數(shù),可以同時(shí)監(jiān)控多個(gè)fd,在select函數(shù)監(jiān)控的fd中,只要有任何一個(gè)數(shù)據(jù)狀態(tài)準(zhǔn)備就緒了,select函數(shù)就會(huì)返回可讀狀態(tài),這時(shí)應(yīng)用進(jìn)程再發(fā)起recvfrom請求去讀取數(shù)據(jù)。0Eh28資訊網(wǎng)——每日最新資訊28at.com

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

非阻塞IO模型(NIO)中,需要N(N>=1)次輪詢系統(tǒng)調(diào)用,然而借助select的IO多路復(fù)用模型,只需要發(fā)起一次詢問就夠了,大大優(yōu)化了性能。0Eh28資訊網(wǎng)——每日最新資訊28at.com

但是呢,select有幾個(gè)缺點(diǎn):0Eh28資訊網(wǎng)——每日最新資訊28at.com

  • 監(jiān)聽的IO最大連接數(shù)有限,在Linux系統(tǒng)上一般為1024。
  • select函數(shù)返回后,是通過遍歷fdset,找到就緒的描述符fd。(僅知道有I/O事件發(fā)生,卻不知是哪幾個(gè)流,所以遍歷所有流)

因?yàn)榇嬖谶B接數(shù)限制,所以后來又提出了poll。與select相比,poll解決了連接數(shù)限制問題。但是呢,select和poll一樣,還是需要通過遍歷文件描述符來獲取已經(jīng)就緒的socket。如果同時(shí)連接的大量客戶端,在一時(shí)刻可能只有極少處于就緒狀態(tài),伴隨著監(jiān)視的描述符數(shù)量的增長,效率也會(huì)線性下降。0Eh28資訊網(wǎng)——每日最新資訊28at.com

因此經(jīng)典的多路復(fù)用模型epoll誕生。0Eh28資訊網(wǎng)——每日最新資訊28at.com

IO多路復(fù)用之epoll

為了解決select/poll存在的問題,多路復(fù)用模型epoll誕生,它采用事件驅(qū)動(dòng)來實(shí)現(xiàn),流程圖如下:0Eh28資訊網(wǎng)——每日最新資訊28at.com

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

epoll先通過epoll_ctl()來注冊一個(gè)fd(文件描述符),一旦基于某個(gè)fd就緒時(shí),內(nèi)核會(huì)采用回調(diào)機(jī)制,迅速激活這個(gè)fd,當(dāng)進(jìn)程調(diào)用epoll_wait()時(shí)便得到通知。這里去掉了遍歷文件描述符的坑爹操作,而是采用監(jiān)聽事件回調(diào)的機(jī)制。這就是epoll的亮點(diǎn)。0Eh28資訊網(wǎng)——每日最新資訊28at.com

我們一起來總結(jié)一下select、poll、epoll的區(qū)別0Eh28資訊網(wǎng)——每日最新資訊28at.com


0Eh28資訊網(wǎng)——每日最新資訊28at.com

select
0Eh28資訊網(wǎng)——每日最新資訊28at.com

poll
0Eh28資訊網(wǎng)——每日最新資訊28at.com

epoll
0Eh28資訊網(wǎng)——每日最新資訊28at.com

底層數(shù)據(jù)結(jié)構(gòu)
0Eh28資訊網(wǎng)——每日最新資訊28at.com

數(shù)組
0Eh28資訊網(wǎng)——每日最新資訊28at.com

鏈表
0Eh28資訊網(wǎng)——每日最新資訊28at.com

紅黑樹和雙鏈表
0Eh28資訊網(wǎng)——每日最新資訊28at.com

獲取就緒的fd
0Eh28資訊網(wǎng)——每日最新資訊28at.com

遍歷
0Eh28資訊網(wǎng)——每日最新資訊28at.com

遍歷
0Eh28資訊網(wǎng)——每日最新資訊28at.com

事件回調(diào)
0Eh28資訊網(wǎng)——每日最新資訊28at.com

事件復(fù)雜度
0Eh28資訊網(wǎng)——每日最新資訊28at.com

O(n)
0Eh28資訊網(wǎng)——每日最新資訊28at.com

O(n)
0Eh28資訊網(wǎng)——每日最新資訊28at.com

O(1)
0Eh28資訊網(wǎng)——每日最新資訊28at.com

最大連接數(shù)
0Eh28資訊網(wǎng)——每日最新資訊28at.com

1024
0Eh28資訊網(wǎng)——每日最新資訊28at.com

無限制
0Eh28資訊網(wǎng)——每日最新資訊28at.com

無限制
0Eh28資訊網(wǎng)——每日最新資訊28at.com

fd數(shù)據(jù)拷貝
0Eh28資訊網(wǎng)——每日最新資訊28at.com

每次調(diào)用select,需要將fd數(shù)據(jù)從用戶空間拷貝到內(nèi)核空間
0Eh28資訊網(wǎng)——每日最新資訊28at.com

每次調(diào)用poll,需要將fd數(shù)據(jù)從用戶空間拷貝到內(nèi)核空間
0Eh28資訊網(wǎng)——每日最新資訊28at.com

使用內(nèi)存映射(mmap),不需要從用戶空間頻繁拷貝fd數(shù)據(jù)到內(nèi)核空間
0Eh28資訊網(wǎng)——每日最新資訊28at.com

epoll明顯優(yōu)化了IO的執(zhí)行效率,但在進(jìn)程調(diào)用epoll_wait()時(shí),仍然可能被阻塞。能不能醬紫:不用我老是去問你數(shù)據(jù)是否準(zhǔn)備就緒,等我發(fā)出請求后,你數(shù)據(jù)準(zhǔn)備好了通知我就行了,這就誕生了信號(hào)驅(qū)動(dòng)IO模型。0Eh28資訊網(wǎng)——每日最新資訊28at.com

IO模型之信號(hào)驅(qū)動(dòng)模型

信號(hào)驅(qū)動(dòng)IO不再用主動(dòng)詢問的方式去確認(rèn)數(shù)據(jù)是否就緒,而是向內(nèi)核發(fā)送一個(gè)信號(hào)(調(diào)用sigaction的時(shí)候建立一個(gè)SIGIO的信號(hào)),然后應(yīng)用用戶進(jìn)程可以去做別的事,不用阻塞。當(dāng)內(nèi)核數(shù)據(jù)準(zhǔn)備好后,再通過SIGIO信號(hào)通知應(yīng)用進(jìn)程,數(shù)據(jù)準(zhǔn)備好后的可讀狀態(tài)。應(yīng)用用戶進(jìn)程收到信號(hào)之后,立即調(diào)用recvfrom,去讀取數(shù)據(jù)。0Eh28資訊網(wǎng)——每日最新資訊28at.com

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

信號(hào)驅(qū)動(dòng)IO模型,在應(yīng)用進(jìn)程發(fā)出信號(hào)后,是立即返回的,不會(huì)阻塞進(jìn)程。它已經(jīng)有異步操作的感覺了。但是你細(xì)看上面的流程圖,發(fā)現(xiàn)數(shù)據(jù)復(fù)制到應(yīng)用緩沖的時(shí)候,應(yīng)用進(jìn)程還是阻塞的。回過頭來看下,不管是BIO,還是NIO,還是信號(hào)驅(qū)動(dòng),在數(shù)據(jù)從內(nèi)核復(fù)制到應(yīng)用緩沖的時(shí)候,都是阻塞的。還有沒有優(yōu)化方案呢?AIO(真正的異步IO)!0Eh28資訊網(wǎng)——每日最新資訊28at.com

IO 模型之異步IO(AIO)

前面講的BIO,NIO和信號(hào)驅(qū)動(dòng),在數(shù)據(jù)從內(nèi)核復(fù)制到應(yīng)用緩沖的時(shí)候,都是阻塞的,因此都不算是真正的異步。AIO實(shí)現(xiàn)了IO全流程的非阻塞,就是應(yīng)用進(jìn)程發(fā)出系統(tǒng)調(diào)用后,是立即返回的,但是立即返回的不是處理結(jié)果,而是表示提交成功類似的意思。等內(nèi)核數(shù)據(jù)準(zhǔn)備好,將數(shù)據(jù)拷貝到用戶進(jìn)程緩沖區(qū),發(fā)送信號(hào)通知用戶進(jìn)程IO操作執(zhí)行完畢。0Eh28資訊網(wǎng)——每日最新資訊28at.com

流程如下:0Eh28資訊網(wǎng)——每日最新資訊28at.com

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

異步IO的優(yōu)化思路很簡單,只需要向內(nèi)核發(fā)送一次請求,就可以完成數(shù)據(jù)狀態(tài)詢問和數(shù)據(jù)拷貝的所有操作,并且不用阻塞等待結(jié)果。日常開發(fā)中,有類似思想的業(yè)務(wù)場景:0Eh28資訊網(wǎng)——每日最新資訊28at.com

比如發(fā)起一筆批量轉(zhuǎn)賬,但是批量轉(zhuǎn)賬處理比較耗時(shí),這時(shí)候后端可以先告知前端轉(zhuǎn)賬提交成功,等到結(jié)果處理完,再通知前端結(jié)果即可。0Eh28資訊網(wǎng)——每日最新資訊28at.com

阻塞、非阻塞、同步、異步IO劃分

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

IO模型
0Eh28資訊網(wǎng)——每日最新資訊28at.com


0Eh28資訊網(wǎng)——每日最新資訊28at.com

阻塞I/O模型
0Eh28資訊網(wǎng)——每日最新資訊28at.com

同步阻塞
0Eh28資訊網(wǎng)——每日最新資訊28at.com

非阻塞I/O模型
0Eh28資訊網(wǎng)——每日最新資訊28at.com

同步非阻塞
0Eh28資訊網(wǎng)——每日最新資訊28at.com

I/O多路復(fù)用模型
0Eh28資訊網(wǎng)——每日最新資訊28at.com

同步阻塞
0Eh28資訊網(wǎng)——每日最新資訊28at.com

信號(hào)驅(qū)動(dòng)I/O模型
0Eh28資訊網(wǎng)——每日最新資訊28at.com

同步非阻塞
0Eh28資訊網(wǎng)——每日最新資訊28at.com

異步IO(AIO)模型
0Eh28資訊網(wǎng)——每日最新資訊28at.com

異步非阻塞
0Eh28資訊網(wǎng)——每日最新資訊28at.com

一個(gè)通俗例子讀懂BIO、NIO、AIO

  • 同步阻塞(blocking-IO)簡稱BIO
  • 同步非阻塞(non-blocking-IO)簡稱NIO
  • 異步非阻塞(asynchronous-non-blocking-IO)簡稱AIO

一個(gè)經(jīng)典生活的例子:0Eh28資訊網(wǎng)——每日最新資訊28at.com

  • 小明去吃同仁四季的椰子雞,就這樣在那里排隊(duì),等了一小時(shí),然后才開始吃火鍋。(BIO)
  • 小紅也去同仁四季的椰子雞,她一看要等挺久的,于是去逛會(huì)商場,每次逛一下,就跑回來看看,是不是輪到她了。于是最后她既購了物,又吃上椰子雞了。(NIO)
  • 小華一樣,去吃椰子雞,由于他是高級(jí)會(huì)員,所以店長說,你去商場隨便逛會(huì)吧,等下有位置,我立馬打電話給你。于是小華不用干巴巴坐著等,也不用每過一會(huì)兒就跑回來看有沒有等到,最后也吃上了美味的椰子雞(AIO)

本文鏈接:http://www.www897cc.com/showinfo-26-79297-0.html看一遍就理解:IO模型詳解

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

上一篇: Spring Boot整合Camunda打造高效工作流程

下一篇: Tailwind CSS,值得2024年的你一試嗎?

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 6月安卓手機(jī)性價(jià)比榜:Note 12 Turbo斷層式碾壓

    6月份有一個(gè)618,雖然這是京東周年慶的日子,但別的電商也都不約而同的跟進(jìn)了,反正促銷沒壞處,廠商和用戶都能滿意。618期間一些產(chǎn)品也出現(xiàn)了歷史低價(jià),那么各個(gè)價(jià)位段的產(chǎn)品性價(jià)比
  • 十個(gè)可以手動(dòng)編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當(dāng),會(huì)很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對(duì)它們進(jìn)行一次小總結(jié)。現(xiàn)在開始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • 如何通過Python線程池實(shí)現(xiàn)異步編程?

    線程池的概念和基本原理線程池是一種并發(fā)處理機(jī)制,它可以在程序啟動(dòng)時(shí)創(chuàng)建一組線程,并將它們置于等待任務(wù)的狀態(tài)。當(dāng)任務(wù)到達(dá)時(shí),線程池中的某個(gè)線程會(huì)被喚醒并執(zhí)行任務(wù),執(zhí)行完任
  • Python異步IO編程的進(jìn)程/線程通信實(shí)現(xiàn)

    這篇文章再講3種方式,同時(shí)講4中進(jìn)程間通信的方式一、 Python 中線程間通信的實(shí)現(xiàn)方式共享變量共享變量是多個(gè)線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會(huì)涉及各種各樣的安全任務(wù),包括但不限于:開發(fā)某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 馮提莫簽約抖音公會(huì) 前“斗魚一姐”消失在直播間

    來源:直播觀察提起“馮提莫”這個(gè)名字,很多網(wǎng)友或許聽過,但應(yīng)該不記得她是哪位主播了。其實(shí),作為曾經(jīng)的“斗魚一姐”,馮提莫在游戲直播的年代影響力不輸于現(xiàn)
  • Android 14發(fā)布:首批適配機(jī)型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會(huì),本次發(fā)布會(huì)谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機(jī),同時(shí)發(fā)布了Androi
  • OPPO K11樣張首曝:千元機(jī)影像“卷”得真不錯(cuò)!

    一直以來,OPPO K系列機(jī)型都保持著較為均衡的產(chǎn)品體驗(yàn),歷來都是2K價(jià)位的明星機(jī)型,去年推出的OPPO K10和OPPO K10 Pro兩款機(jī)型憑借各自的出色配置,堪稱有
  • 由于成本持續(xù)增加,筆記本產(chǎn)品價(jià)格預(yù)計(jì)將明顯上漲

    根據(jù)知情人士透露,由于材料、物流等成本持續(xù)增加,筆記本產(chǎn)品價(jià)格預(yù)計(jì)將在2021年下半年有明顯上漲。進(jìn)入6月下旬以來,全球半導(dǎo)體芯片缺貨情況加劇,顯卡、處理器
Top 主站蜘蛛池模板: 海南省| 旬邑县| 阿拉善右旗| 天祝| 乌苏市| 丰原市| 广安市| 光泽县| 博客| 平泉县| 常宁市| 文水县| 大厂| 曲阳县| 崇左市| 新龙县| 景东| 乐平市| 禄丰县| 清原| 申扎县| 盐津县| 青州市| 独山县| 镇安县| 秦安县| 舟曲县| 道孚县| 锡林郭勒盟| 阿拉尔市| 九龙坡区| 清新县| 福建省| 兴城市| 栾城县| 卫辉市| 穆棱市| 富民县| 宁强县| 饶阳县| 漯河市|