您好,登錄后才能下訂單哦!
本篇文章為大家展示了Swoole中如何理解進程和事件IO,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
1.文件鎖
子進程回復制父進程的IO句柄,但是不能讓所有的子進程同時對同一個文件進行操作,所以需要文件鎖。
2.進程間的通訊方式--管道
管道是一組(2個)特殊的描述符
管道需要在fork函數調用前創建
如果某一段主動關閉管道,另一端讀取操作會直接返回0,之后會關閉管道
在父進程中創建管道的時候,父進程會創建一組描述符;子進程在進行復制父進程時,會復制這一組描述符。
3.進程間的通訊方式--消息隊列
使用消息隊列比流式管道的好處是,假如某一端服務掛了,但是因為消息還在隊列中,所以數據不會丟失
消息隊列的通訊方式很像共享內存
可以通過指定key創建一個消息隊列
在消息隊列中傳遞的數據大小有限制 默認65535k
消息隊列會一直保留到被主動關閉
4.IO多路復用
epoll會監聽注冊再在自己名下所有的socket描述符
當有socket感興趣的時間發生時,epoll函數才會響應,并返回有時間發生的socket集合
epoll的本事是阻塞IO,優點是能夠處理大量的socket集合
5.Event Loop簡介
Event loop是一個Reactor線程,其中運行了一個epoll實例
可通過接口添加到socket描述符的epoll監聽中,并制定時間響應的回調函數
因為Event loop是單獨線程,不能用于fpm的環境下。因為fpm是新起的進程,事件完畢后有可能被關閉,此時scoket便不能被監聽了。
開啟Event loop后,程序會啟動一個線程并一直阻塞在epoll的監聽上,開啟了Event loop后,程序會一直運行不停止,這也是swoole開發者的本意。終止的方法是調用swoole_event_exit函數。
6.swoole進程
swoole process包含三個部分:管道,內存和IO句柄
swoole process有以下的幾個優點:
是基于C語言封裝的管理模塊,方便PHP多進程編程;
內置管道、消息隊列接口,方便實現進程間的通信;
提供自定義信號管理
上述內容就是Swoole中如何理解進程和事件IO,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。