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

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

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

來源: 責(zé)編: 時(shí)間:2024-03-26 09:35:23 190觀看
導(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è)問題哈~qhv28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

什么是IO呢?

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

IO,即輸入/輸出,到底誰是輸入?誰是輸出呢?IO如果脫離了主體,就會(huì)讓人疑惑。qhv28資訊網(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è)備。qhv28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qhv28資訊網(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è)備。qhv28資訊網(wǎng)——每日最新資訊28at.com

例如你在鼠標(biāo)鍵盤敲幾下,它就會(huì)把你的指令數(shù)據(jù),傳給主機(jī),主機(jī)通過運(yùn)算后,把返回的數(shù)據(jù)信息,輸出到顯示器。qhv28資訊網(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ì)。qhv28資訊網(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)程可以把它寫入到磁盤)。qhv28資訊網(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來操作。qhv28資訊網(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)用。qhv28資訊網(wǎng)——每日最新資訊28at.com

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

應(yīng)用程序發(fā)起的一次IO操作包含兩個(gè)階段:qhv28資訊網(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è)過程:qhv28資訊網(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ū)

圖片圖片qhv28資訊網(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è)步驟:qhv28資訊網(wǎng)——每日最新資訊28at.com

  • 應(yīng)用程序進(jìn)程向操作系統(tǒng)發(fā)起IO調(diào)用請(qǐng)求
  • 操作系統(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呢?qhv28資訊網(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。qhv28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qhv28資訊網(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)程,讓它不需要等待,而是通過輪詢的方式再來請(qǐng)求。這就是非阻塞IO,流程圖如下:qhv28資訊網(wǎng)——每日最新資訊28at.com

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

非阻塞IO的流程如下:qhv28資訊網(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è)問題。qhv28資訊網(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)用,那不就好了嘛?qhv28資訊網(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è)文件描述符。qhv28資訊網(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)用。qhv28資訊網(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請(qǐng)求去讀取數(shù)據(jù)。qhv28資訊網(wǎng)——每日最新資訊28at.com

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

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

但是呢,select有幾個(gè)缺點(diǎn):qhv28資訊網(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ì)線性下降。qhv28資訊網(wǎng)——每日最新資訊28at.com

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

IO多路復(fù)用之epoll

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

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

epoll先通過epoll_ctl()來注冊(cè)一個(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)。qhv28資訊網(wǎng)——每日最新資訊28at.com

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

圖片圖片qhv28資訊網(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)!qhv28資訊網(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í)行完畢。qhv28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

一個(gè)經(jīng)典生活的例子:qhv28資訊網(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)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

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

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

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 石頭自清潔掃拖機(jī)器人G10S評(píng)測(cè):多年黑科技集大成之作 懶人終極福音

    科技圈經(jīng)常能看到一個(gè)詞叫“縫合怪”,用來形容那些把好多功能或者外觀結(jié)合在一起的產(chǎn)品,通常這樣的詞是貶義詞,但如果真的是產(chǎn)品縫合的好、縫合的實(shí)用的話,那它就成了中性詞,今
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現(xiàn)已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從“最美JK”起到“最美女星&r
  • 如何使用JavaScript創(chuàng)建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經(jīng)瀏覽過購物網(wǎng)站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區(qū)域,以便瀏覽。結(jié)合這個(gè)小小的重要功能可以大大改善您網(wǎng)站的用戶體驗(yàn)
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個(gè)人開發(fā)仿造稿定設(shè)計(jì)的圖片編輯器到現(xiàn)在,不知不覺已過去一年時(shí)間了,期間我經(jīng)歷了裁員失業(yè)、面試找工作碰壁,寒冬下一直沒有很好地履行計(jì)劃.....這些就放在日
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元“人在職場,應(yīng)該選擇什么樣的著裝?”近日,在網(wǎng)絡(luò)上,一個(gè)與著裝相關(guān)的帖子引發(fā)關(guān)注,在該帖子里,一位在高級(jí)寫字樓亞洲金
  • 認(rèn)真聊聊東方甄選:如何告別低垂的果實(shí)

    來源:山核桃作者:財(cái)經(jīng)無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關(guān)心的“網(wǎng)紅”。7月5日至9日,為期5天的東方甄選“甘肅行”首次在自有App內(nèi)直播,
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創(chuàng) 作者|程心 羅輯2023年之前,對(duì)于自己的“今天”,百度也很迷茫。“新業(yè)務(wù)到 2022 年底還是 0,希望 2023 年出來一個(gè) 1。”這是2022年底,李彥宏
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯(lián)網(wǎng)那些事“起猛了,我能看得懂日語了”。“為什么日本人說話我能聽懂?”“中文不像中文,日語不像日語,但是我竟然看懂了”…&hell
  • 華為發(fā)布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開發(fā)者大會(huì)2023(HDC.Together)大會(huì)上,HarmonyOS 4正式發(fā)布。自2019年發(fā)布以來,HarmonyOS一直以用戶為中心,經(jīng)歷四年多的發(fā)展HarmonyOS已
Top 主站蜘蛛池模板: 留坝县| 天峨县| 墨江| 石泉县| 孝感市| 洞口县| 镇安县| 建德市| 呼和浩特市| 越西县| 安福县| 耿马| 荆门市| 通江县| 灌南县| 元谋县| 北票市| 霞浦县| 简阳市| 囊谦县| 梅州市| 普兰县| 当雄县| 清涧县| 康定县| 宜州市| 马鞍山市| 蓬安县| 合江县| 铜梁县| 遂溪县| 高唐县| 建昌县| 天柱县| 陇西县| 沅江市| 昔阳县| 双峰县| 东辽县| 宁远县| 宣威市|