黄p网站_在线看中文字幕_亚洲电影免费观看_成人激情视频_欧美成视频_中国av在线

進(jìn)程阻塞

正在運(yùn)行的進(jìn)程由于提出系統(tǒng)服務(wù)請(qǐng)求(如I/O操作),但因?yàn)槟撤N原因未得到操作系統(tǒng)的立即響應(yīng),或者需要從其他合作進(jìn)程獲得的數(shù)據(jù)尚未到達(dá)等原因,該進(jìn)程只能調(diào)用阻塞原語(yǔ)把自己阻塞,等待相應(yīng)的事件出現(xiàn)后才被喚醒。

阻塞狀態(tài)

正在進(jìn)行的進(jìn)程由于發(fā)生某事件而暫時(shí)無(wú)法繼續(xù)執(zhí)行時(shí),便放棄處理機(jī)而處于暫停狀態(tài),亦即進(jìn)程的執(zhí)行受到阻塞,我們把這種暫停狀態(tài)叫阻塞進(jìn)程阻塞,有時(shí)也成為等待狀態(tài)或封鎖狀態(tài)。通常這種處于阻塞狀態(tài)的進(jìn)程也排成一個(gè)隊(duì)列。有的系統(tǒng)則根據(jù)阻塞原因的不同而處于阻塞狀態(tài)進(jìn)程排成多個(gè)隊(duì)列。

例如:
用戶訪問(wèn)服務(wù)端,請(qǐng)求用戶的個(gè)人的訂單信息,由于數(shù)據(jù)庫(kù)數(shù)據(jù)量大,數(shù)據(jù)庫(kù)繁忙,sql語(yǔ)句查詢了3秒才返回,這個(gè)查詢數(shù)據(jù)庫(kù)的過(guò)程,就是可稱(chēng)為是"阻塞的".(進(jìn)程調(diào)用外部邏輯)

阻塞這個(gè)概念和時(shí)間關(guān)系不大,就算查了0.1秒,也可以說(shuō)是阻塞了0.1秒,因?yàn)檫@個(gè)并不是進(jìn)程本身執(zhí)行所消耗的時(shí)間,而是因?yàn)椴樵償?shù)據(jù)庫(kù),等待數(shù)據(jù)庫(kù)響應(yīng)消耗的時(shí)間. 但阻塞的危害性和時(shí)間有關(guān),阻塞0.1秒對(duì)于用戶是沒(méi)有任何問(wèn)題的,但是阻塞10秒將會(huì)使用戶體驗(yàn)下降很多,所以我們需要重視阻塞

用戶訪問(wèn)服務(wù)端,由于某個(gè)地方調(diào)用了死循環(huán)或多重循環(huán)浪費(fèi)了許多時(shí)間,無(wú)法繼續(xù)往下執(zhí)行,這個(gè)狀態(tài)也可稱(chēng)為阻塞.(非進(jìn)程阻塞,可自行避免)
非進(jìn)程阻塞 在進(jìn)程阻塞層面中,并不算是被阻塞了,因?yàn)樗琅f在執(zhí)行進(jìn)程中的代碼,沒(méi)有等待清空

阻塞函數(shù)

如上所說(shuō),調(diào)用數(shù)據(jù)庫(kù)等外部邏輯,造成阻塞的函數(shù),就叫做阻塞函數(shù)

php中的阻塞

在php初級(jí)開(kāi)發(fā)者中,或許沒(méi)有聽(tīng)過(guò)這個(gè)概念,阻塞往往是和"同步"概念一起存在的,例如查詢數(shù)據(jù)庫(kù),獲取文件數(shù)據(jù),請(qǐng)求其他網(wǎng)站,等等,只要需要消耗非進(jìn)程本身執(zhí)行時(shí)間并需要進(jìn)程等待(同步)的,都可以說(shuō)是阻塞.

幾乎所有的阻塞,都是與I/O有關(guān).
阻塞一定是同步代碼調(diào)用阻塞函數(shù)才會(huì)阻塞,但同步代碼不一定會(huì)阻塞(不調(diào)用阻塞函數(shù)的同步代碼)

<?php
$num = 30;
$result = M('test')->select();//偽代碼,sql阻塞
sleep(3);//偽代碼,當(dāng)成執(zhí)行了3秒才返回
echo json_encode($result);//返回?cái)?shù)據(jù)

可自行搜索了解更多

非阻塞

非阻塞,顧名思義,就是在進(jìn)程在運(yùn)行中,不存在阻塞情況,一直能往下執(zhí)行.

非阻塞一般是指調(diào)用I/O操作時(shí),進(jìn)程無(wú)需等待I/O操作,直接往下執(zhí)行的情況 非阻塞通常是和"異步"概念一起存在,只要是異步獲取I/O,就一定是非阻塞
異步調(diào)用I/O一定是非阻塞的,但非阻塞不一定需要異步調(diào)用才可實(shí)現(xiàn)(非阻塞模型)

例如:
當(dāng)查詢數(shù)據(jù)庫(kù)時(shí),馬上返回狀態(tài)(查詢到了就返回?cái)?shù)據(jù),數(shù)據(jù)還沒(méi)到就返回-1),程序可以立即往下執(zhí)行邏輯.

這種馬上返回結(jié)果,無(wú)需等待(并不一定有數(shù)據(jù))的函數(shù),就叫做非阻塞函數(shù),也可稱(chēng)為是"異步調(diào)用"

非阻塞模型

可以通過(guò)非阻塞模型去實(shí)現(xiàn)非阻塞(主要針對(duì)于server服務(wù)端實(shí)現(xiàn)).

php中的非阻塞

php初級(jí)開(kāi)發(fā)者中,很少有非阻塞這個(gè)概念存在,但php是有非阻塞的,例如socket_set_nonblock()函數(shù),將socket改為非阻塞狀態(tài)
通過(guò)flock($file,LOCK_EX|LOCK_NB),可將文件操作設(shè)置為非阻塞狀態(tài)
可自行搜索了解詳細(xì)

非阻塞注意事項(xiàng)

由于非阻塞的返回結(jié)果是不確定的,當(dāng)我們需要關(guān)心返回結(jié)果的情況時(shí),需要確保返回結(jié)果是正確的(例如while(1){}定時(shí)查詢,當(dāng)數(shù)據(jù)正確返回退出循環(huán)),或者直接使用阻塞函數(shù)

阻塞和非阻塞的舉例

阻塞:
小明去電腦店買(mǎi)Mac,問(wèn)店員現(xiàn)在有沒(méi)有MacBook Pro版本,有多少臺(tái),店員告訴小明,"我得去查一查,你得等等",小明站在店門(mén)口等了2天,店員回來(lái)了,告訴小明,現(xiàn)在有10臺(tái),然后小明買(mǎi)了一臺(tái).

在這個(gè)過(guò)程中,店員查詢是否有mbp的動(dòng)作,就屬于I/O操作,叫小明等等這個(gè)操作,就是阻塞情況,小明等了2天,就說(shuō)明查詢mbp時(shí)間為2天,阻塞了2天,店員回來(lái)告訴小明有10臺(tái),就是阻塞函數(shù)出現(xiàn)了結(jié)果,并返回了數(shù)據(jù),小明買(mǎi)了一臺(tái),就是繼續(xù)往下執(zhí)行了代碼

非阻塞: 小明去電腦店買(mǎi)Mac,問(wèn)店員現(xiàn)在有沒(méi)有MacBook Pro版本,有多少臺(tái),店員告訴小明,"我得去查一查,你先回去唄",小明回家,每隔10分鐘打電話給店員,但是店員每次都告訴他還沒(méi)查到,小明每次打完電話就去敲PHP代碼,2天后,小明打完一把LOL,又打電話給店員問(wèn),店員告訴小明,現(xiàn)在有10臺(tái)了,然后小明買(mǎi)了一臺(tái).

在這個(gè)過(guò)程中,店員查詢是否有mbp的動(dòng)作,就屬于I/O操作,叫小明回家這個(gè)操作,就是非阻塞情況,小明不斷打電話,這個(gè)就是定時(shí)輪詢查詢,店員不斷的回復(fù),這個(gè)情況就是非阻塞函數(shù)沒(méi)有返回?cái)?shù)據(jù),小明去敲PHP,說(shuō)明非阻塞情況還能執(zhí)行其他代碼,2天后,店員回來(lái)告訴小明有10臺(tái),就是非阻塞函數(shù)通過(guò)輪詢出現(xiàn)了結(jié)果,并返回了數(shù)據(jù),小明買(mǎi)了一臺(tái),就是退出了循環(huán)繼續(xù)往下執(zhí)行了代碼

同步異步

主站蜘蛛池模板: 日韩在线视频播放 | 六月丁香啪啪 | 91精品一区二区三区久久久久久 | 亚洲第一视频 | 日韩毛片在线观看 | 亚洲视频一区在线 | 国产亚洲精品久久久久久久久 | 污视频在线免费观看 | 日韩精品一区在线 | 亚洲激情视频 | 国产一区二区三区久久久 | 毛片网站大全 | 日本黄色片免费 | 五月激情综合 | 激情自拍偷拍 | 日韩精品一区二区三区在线观看 | 亚洲精品国产第一综合99久久 | 毛片在线视频 | 日韩在线免费 | 日本激情视频在线播放 | 夜夜艹日日艹 | 国产精品欧美一区二区三区不卡 | 国产一区二区三区免费视频 | 国产做a爱片久久毛片 | 精品亚洲一区二区三区四区五区 | www欧美 | 久久一区| 亚洲精品网址 | 成人综合视频在线 | 久久精品国产亚洲blacked | 成人精品一区 | 91精品国产综合久久国产大片 | 欧美日韩视频在线观看一区 | 操人网| 久久久91精品国产一区二区精品 | 亚洲一区二区三区日韩 | 亚洲成人一二区 | 国产精品国产三级国产aⅴ入口 | 不卡免费视频 | 午夜剧院官方 | 中文字幕在线观看1 |