easyswoole - 基于swoole扩展实现的一款高性能php框架

進程阻塞

正在運行的進程由于提出系統服務請求(如I/O操作),但因為某種原因未得到操作系統的立即響應,或者需要從其他合作進程獲得的數據尚未到達等原因,該進程只能調用阻塞原語把自己阻塞,等待相應的事件出現后才被喚醒。

阻塞狀態

正在進行的進程由于發生某事件而暫時無法繼續執行時,便放棄處理機而處于暫停狀態,亦即進程的執行受到阻塞,我們把這種暫停狀態叫阻塞進程阻塞,有時也成為等待狀態或封鎖狀態。通常這種處于阻塞狀態的進程也排成一個隊列。有的系統則根據阻塞原因的不同而處于阻塞狀態進程排成多個隊列。

例如:
用戶訪問服務端,請求用戶的個人的訂單信息,由于數據庫數據量大,數據庫繁忙,sql語句查詢了3秒才返回,這個查詢數據庫的過程,就是可稱為是"阻塞的".(進程調用外部邏輯)

阻塞這個概念和時間關系不大,就算查了0.1秒,也可以說是阻塞了0.1秒,因為這個并不是進程本身執行所消耗的時間,而是因為查詢數據庫,等待數據庫響應消耗的時間. 但阻塞的危害性和時間有關,阻塞0.1秒對于用戶是沒有任何問題的,但是阻塞10秒將會使用戶體驗下降很多,所以我們需要重視阻塞

用戶訪問服務端,由于某個地方調用了死循環或多重循環浪費了許多時間,無法繼續往下執行,這個狀態也可稱為阻塞.(非進程阻塞,可自行避免)
非進程阻塞 在進程阻塞層面中,并不算是被阻塞了,因為它依舊在執行進程中的代碼,沒有等待清空

阻塞函數

如上所說,調用數據庫等外部邏輯,造成阻塞的函數,就叫做阻塞函數

php中的阻塞

在php初級開發者中,或許沒有聽過這個概念,阻塞往往是和"同步"概念一起存在的,例如查詢數據庫,獲取文件數據,請求其他網站,等等,只要需要消耗非進程本身執行時間并需要進程等待(同步)的,都可以說是阻塞.

幾乎所有的阻塞,都是與I/O有關.
阻塞一定是同步代碼調用阻塞函數才會阻塞,但同步代碼不一定會阻塞(不調用阻塞函數的同步代碼)

<?php
$num = 30;
$result = M('test')->select();//偽代碼,sql阻塞
sleep(3);//偽代碼,當成執行了3秒才返回
echo json_encode($result);//返回數據

可自行搜索了解更多

非阻塞

非阻塞,顧名思義,就是在進程在運行中,不存在阻塞情況,一直能往下執行.

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

例如:
當查詢數據庫時,馬上返回狀態(查詢到了就返回數據,數據還沒到就返回-1),程序可以立即往下執行邏輯.

這種馬上返回結果,無需等待(并不一定有數據)的函數,就叫做非阻塞函數,也可稱為是"異步調用"

非阻塞模型

可以通過非阻塞模型去實現非阻塞(主要針對于server服務端實現).

php中的非阻塞

php初級開發者中,很少有非阻塞這個概念存在,但php是有非阻塞的,例如socket_set_nonblock()函數,將socket改為非阻塞狀態
通過flock($file,LOCK_EX|LOCK_NB),可將文件操作設置為非阻塞狀態
可自行搜索了解詳細

非阻塞注意事項

由于非阻塞的返回結果是不確定的,當我們需要關心返回結果的情況時,需要確保返回結果是正確的(例如while(1){}定時查詢,當數據正確返回退出循環),或者直接使用阻塞函數

阻塞和非阻塞的舉例

阻塞:
小明去電腦店買Mac,問店員現在有沒有MacBook Pro版本,有多少臺,店員告訴小明,"我得去查一查,你得等等",小明站在店門口等了2天,店員回來了,告訴小明,現在有10臺,然后小明買了一臺.

在這個過程中,店員查詢是否有mbp的動作,就屬于I/O操作,叫小明等等這個操作,就是阻塞情況,小明等了2天,就說明查詢mbp時間為2天,阻塞了2天,店員回來告訴小明有10臺,就是阻塞函數出現了結果,并返回了數據,小明買了一臺,就是繼續往下執行了代碼

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

在這個過程中,店員查詢是否有mbp的動作,就屬于I/O操作,叫小明回家這個操作,就是非阻塞情況,小明不斷打電話,這個就是定時輪詢查詢,店員不斷的回復,這個情況就是非阻塞函數沒有返回數據,小明去敲PHP,說明非阻塞情況還能執行其他代碼,2天后,店員回來告訴小明有10臺,就是非阻塞函數通過輪詢出現了結果,并返回了數據,小明買了一臺,就是退出了循環繼續往下執行了代碼

同步異步

主站蜘蛛池模板: 无心磨床- 无锡润一机床有限公司| 微EAM - EHS安全管理系统-设备管理系统-设备全生命周期管理软件-HSE安全管理软件 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 土工布厂家,土工布价格,山东德旭达土工材料有限公司 | 运动控制器_数控系统_廊坊市九盈数控技术公司「官网」 | 衢州装饰公司_衢州装修公司_衢州创美装饰工程有限公司 - Powered by www.qzcmzs.com | 中华收藏网-中藏网-藏品拍卖|字画拍卖|艺术品拍卖|古玩城|收藏资讯|古玩交易|书画定制 | 监控工程,安防监控公司,北京监控安装,北京安装监控,安装摄像头,北京监控维保,监控施工,北京监控维修,监控弱电工程,监控器安装,监控维护保养,监控工程设计,北京监控设备维修,监控报警安装,北京北方合力科技有限公司 | 塑料桶生产厂家-山东塑料桶-化工塑料桶-200升塑料桶-山东欣越塑料制品有限公司 | 铨盛国际供应链-PC增韧剂/硅系增韧剂/耐寒增韧剂/耐化学增韧剂 | 芜湖市皖创管业有限公司| 钱眼网-透过钱眼看商机| 柱状_椰壳_蜂窝_果壳_粉状活性炭_活性炭厂家 - 銮桦净化 | 水宜生-水宜生水杯价格-水宜生保温杯-【水宜生水杯官网】 | 潍坊卓瑞机械有限公司,输送设备,石灰消化设备,餐厨垃圾设备,化机浆设备,污泥脱水 | 医用手摇病床,医用电动病床,康养手摇病床,康养电动病床-河北丁丁医疗器械有限公司 | 江西新华电脑学院_南昌新华电脑中专学校_新华电脑培训学校_官方网站 | 中科盛世酒窖 - 酒窖设计_酒窖工程_酒窖空调设备_恒温酒柜定制_私人别墅家庭酒窖_不锈钢红酒柜_实木雪茄柜 | 油漆颜料砂磨机,油墨水砂磨机,水性涂料砂磨机-常州市奥能达机械设备有限公司 | 卫生间隔断-东莞卫生间隔断-东莞卫生间隔断厂家-公共卫生间隔断-东莞市康丰家居建材有限公司 | 制砂机_鹅卵石制砂机_河卵石制砂机_制砂机价格-上海山卓重工机械有限公司 | 张家港起重搬运吊装,工厂设备搬运服务-张家港易源起重搬运有限公司 | 连云港海盛石英科技有限公司| 新洲际教育-一站式留学解决方案领航者【官网】 | 天津翻译公司盖章|022-58385822| 翰文博译(天津)商务咨询有限公司 | 深圳市碧源达科技有限公司 | 转炉烟道,转炉汽化冷却烟道,转炉汽化烟道,汽化冷却烟道系统生产厂家-宏发制造集团有限公司原河北宏发机械有限公司 | 液压扳手-液压扭力扳手-电动扭矩扳手-气动扭力扳手-波霆机械(上海) | 江苏减速机_常州减速机_摆线减速机_摆线针轮减速机 | 套丝机_钢管套丝机_螺栓套丝机S8139_螺纹钢套丝机_智能套丝机价格-瑞捷机械设备有限公司 | 河南新百福国际物流有限公司 | 造型松|造型黑松|油松|泰山松-莱芜市盛世园林苗木专业合作社 | 景县泉兴永塔业有限公司-广播电视塔、通信塔、电力塔、交通设施、监控杆塔、气象塔、森林防火瞭望塔、避雷塔、烟筒塔、训练塔 | 金属探测机_食品金属探测仪_食品金属探测器_广东善安金属检测机 金属剪切机,金属打包机,废钢剪切机,废铁压块机,金属压块机,废纸打包机,重废龙门剪,废钢龙门剪,箱式剪,液压剪切机-瑞顿机械装备制造江阴有限公司 | 西安测试仪-西安电压测试仪-西安电流测试仪-西安热油汽水测试仪-西安阻抗测试仪-西安时间速度测试仪-西安电力设备厂家-西安中洲电力设备有限公司 | 实木中药柜,实木中药斗,木制中药柜,木制中药柜的价格,实木中草药柜,安国美佳中药柜厂家 | 江门市振达机械制造有限公司_散货输送系统_全密封带式输送机 | 长春互联网运营值选星广传媒,长春短视频运营,长春新媒体运营,长春互联网运营,长春抖音运营,吉林视频号代运营,吉林快手代运营,短视频推广公司,公众号运营,微博运营,新媒体运营 | 啤酒厂家_啤酒代工厂_原浆啤酒厂家 - 山东十谷啤酒有限公司 | 浙江微龙科技-微通道工艺结合设备一站式解决方案-致力于连续流技术开发与产业化应用-助力传统医药化工行业转型升级 | 红都服装官网-北京红都西服-红都西服定制-北京红都集团 |