摘要:最近面試問的比較多的問題就是這一塊了,有些也答出來了,有些答的不好,最近這段時(shí)間開始深入了解一些這方面的東西,也想總結(jié)一下。
最近面試問的比較多的問題就是IO這一塊了,有些也答出來了,有些答的不好,最近這段時(shí)間開始深入了解一些這方面的東西,也想總結(jié)一下。
前置點(diǎn)
1,用戶空間系統(tǒng)空間
Linux系統(tǒng)會(huì)把一個(gè)進(jìn)程分為兩個(gè)空間,用戶空間和系統(tǒng)空間,比如我們正常的編碼,操作的都是用戶空間的,那如果我們需要調(diào)用系統(tǒng)功能,比如拷貝系統(tǒng)文件,這種就需要調(diào)用系統(tǒng)組件,獲取內(nèi)核服務(wù),完成操作
IO的兩個(gè)階段
IO的執(zhí)行過程中分為兩個(gè)階段,等待就緒,執(zhí)行拷貝
等待就緒:我們知道,我們執(zhí)行IO操作的時(shí)候,數(shù)據(jù)可能來自別的應(yīng)用程序或者網(wǎng)絡(luò),如果沒有數(shù)據(jù),操作系統(tǒng)是會(huì)一直等待的,此時(shí),應(yīng)用程序可能也會(huì)一直等待
執(zhí)行拷貝:將數(shù)據(jù)拷貝到應(yīng)用程序工作區(qū)
阻塞與非阻塞,同步與異步
先說同步與非同步,最簡單就是看是否啟動(dòng)一個(gè)線程或者進(jìn)程來完成IO這件事情,同步IO的時(shí)候,系統(tǒng)會(huì)停下來等這個(gè)做完才能做別的事情,而異步IO就利用多線程的方式,啟動(dòng)一個(gè)新的線程去做這件事情,而自己就可以去干別的事情等待通知
再說阻塞與非阻塞吧,這兩個(gè)其實(shí)關(guān)注的是程序在等待調(diào)用結(jié)果的時(shí)候的狀態(tài),阻塞是指,你在獲取這個(gè)結(jié)果的時(shí)候,你會(huì)一直掛起,直到等到完整結(jié)果之后你才會(huì)繼續(xù)執(zhí)行,非阻塞是指,在該進(jìn)程不能獲取結(jié)果的時(shí)候,沒有阻塞線程,這個(gè)有點(diǎn)繞,有一個(gè)通俗的解釋,如果是阻塞的,我要獲取這個(gè)東西,獲取過程中,我就失去了CPU,等到結(jié)果之后我才會(huì)獲取CPU,但是如果我是非阻塞,我就繼續(xù)持有CPU,我還可以一直檢查
幾種IO模型
目前比較多的就是5種
阻塞IO
最傳統(tǒng)的一種IO,即讀寫會(huì)發(fā)生阻塞現(xiàn)象的
非阻塞IO
用戶發(fā)起read的時(shí)候,并不會(huì)失去CPU,會(huì)一直check,如果沒有成功,會(huì)返回一個(gè)error,如果收到成功信號(hào),就會(huì)發(fā)起read操作,獲取完整結(jié)果
多路復(fù)用IO
這個(gè)就是Java NIO的核心了,會(huì)有一個(gè)線程管理多個(gè)socket的狀態(tài),檢查是否有準(zhǔn)備好的,只有發(fā)現(xiàn)真正準(zhǔn)備好,才會(huì)調(diào)用cpu執(zhí)行IO操作,這塊是比較重要的
信號(hào)驅(qū)動(dòng)IO
用的少,忽略
異步IO
起一個(gè)線程去執(zhí)行吧
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69488.html
摘要:可簡單地認(rèn)為它是的擴(kuò)展,負(fù)載均衡自然成為不可或缺的特性。是基于開發(fā)的服務(wù)代理組件,在使用場景中,它與和整合,打造具備服務(wù)動(dòng)態(tài)更新和負(fù)載均衡能力的服務(wù)網(wǎng)關(guān)。類似的特性在項(xiàng)目也有體現(xiàn),它是另一種高性能代理的方案,提供服務(wù)發(fā)現(xiàn)健康和負(fù)載均衡。 摘要: Cloud Native 應(yīng)用架構(gòu)隨著云技術(shù)的發(fā)展受到業(yè)界特別重視和關(guān)注,尤其是 CNCF(Cloud Native Computing Fo...
摘要:同步信號(hào)驅(qū)動(dòng)在快遞柜上寫上自己的手機(jī)號(hào)回調(diào)函數(shù),當(dāng)快遞送過來的時(shí)候直接給我打電話執(zhí)行回調(diào)函數(shù),然后我去取快遞。 IO模型 對于IO,我們經(jīng)??梢月牭街T如同步阻塞IO,同步非阻塞IO,異步IO等等,那么什么是異步/同步,什么是阻塞/非阻塞?首先一次IO在UNIX系統(tǒng)中分為兩個(gè)步驟 1.發(fā)起IO請求:用戶線程向操作系統(tǒng)內(nèi)核發(fā)起IO請求 2.執(zhí)行IO操作:當(dāng)內(nèi)核準(zhǔn)備好數(shù)據(jù)可以提交給發(fā)起IO請...
摘要:可簡單地認(rèn)為它是的擴(kuò)展,負(fù)載均衡自然成為不可或缺的特性。類似的特性在項(xiàng)目也有體現(xiàn),它是另一種高性能代理的方案,提供服務(wù)發(fā)現(xiàn)健康和負(fù)載均衡。 Dubbo Cloud Native 實(shí)踐與思考 分享簡介 Cloud Native 應(yīng)用架構(gòu)隨著云技術(shù)的發(fā)展受到業(yè)界特別重視和關(guān)注,尤其是 CNCF(Cloud Native Computing Foundation)項(xiàng)目蓬勃發(fā)展之際。Dubbo...
摘要:直到有一天你會(huì)碰到線上奇奇怪怪的問題,如線程執(zhí)行一個(gè)任務(wù)遲遲沒有返回,應(yīng)用假死。正好這次借助之前的一次生產(chǎn)問題來聊聊如何排查和解決問題。本地模擬上文介紹的是線程相關(guān)問題,現(xiàn)在來分析下內(nèi)存的問題。盡可能的減少多線程競爭鎖。 showImg(https://segmentfault.com/img/remote/1460000015568421?w=2048&h=1150); 前言 之前或...
摘要:排序算法和集合工具類排序算法和集合工具類。面試官總是問排序算法也不是在難為你,而是在考察你的編程功底。你首先要理解多線程不僅僅是和那么簡單,整個(gè)并發(fā)包下面的工具都是在為多線程服務(wù)。 去年的這個(gè)時(shí)候樓主通過兩個(gè)月的復(fù)習(xí)拿到了阿里巴巴的 offer,有一些運(yùn)氣,也有一些心得,借著跳槽季來臨特此分享出來。簡單梳理一下我的復(fù)習(xí)思路,同時(shí)也希望和大家一起交流討論,一起學(xué)習(xí),如果不對之處歡迎指正一...
閱讀 1719·2023-04-26 01:02
閱讀 4887·2021-11-24 09:39
閱讀 1821·2019-08-30 15:44
閱讀 2902·2019-08-30 11:10
閱讀 1796·2019-08-30 10:49
閱讀 996·2019-08-29 17:06
閱讀 623·2019-08-29 16:15
閱讀 913·2019-08-29 15:17