swoole通往大神之路——swoole任務中心說明及進程任務架構搭建

Swoole多任務處理中心

如果你還不會用swoole就out了,swoole通往大神之路——swoole任務中心說明及進程任務架構搭建

教學視頻:

www.bilibili.com/video/av779…

一细移、進程的基本知識

什么是進程,所謂進程其實就是操作系統(tǒng)中一個正在運行的程序设凹,我們在一個終端當中,通過php,運行一個php文件,這個時候就相當于我們創(chuàng)建了一個進程濒析,這個進程會在系統(tǒng)中駐存,申請屬于它自己的內存空間系統(tǒng)資源并且運行相應的程序

對于一個進程來說啥纸,它的核心內容分為兩個部分悼枢,一個是它的內存,這個內存是這進程創(chuàng)建之初從系統(tǒng)分配的脾拆,它所有創(chuàng)建的變量都會存儲在這一片內存環(huán)境當中

一個是它的上下文環(huán)境我們知道進程是運行在操作系統(tǒng)的,那么對于程序來說莹妒,它的運行依賴操作系統(tǒng)分配給它的資源名船,操作系統(tǒng)的一些狀態(tài)。

在操作系統(tǒng)中可以運行多個進程的旨怠,對于一個進程來說渠驼,它可以創(chuàng)建自己的子進程,那么當我們在一個進程中創(chuàng)建出若干個子進程的時候那么可以看到如圖鉴腻,子進程和父進程一樣迷扇,擁有自己的內存空間和上下文環(huán)境


二、進程間通訊

進程間通信(IPC爽哎,Inter-Process Communication)蜓席,指至少兩個進程或線程間傳送數據或信號的一些技術或方法。每個進程都有自己的一部分獨立的系統(tǒng)資源课锌,彼此是隔離的厨内。為了能使不同的進程互相訪問資源并進行協調工作,才有了進程間通信渺贤。

進程通信有如下的目的:

數據傳輸雏胃,一個進程需要將它的數據發(fā)送給另一個進程,發(fā)送的數據量在一個字節(jié)到幾M之間志鞍;

共享數據瞭亮,多個進程想要操作共享數據,一個進程對數據的修改固棚,其他進程應該立刻看到统翩;

進程控制仙蚜,有些進程希望完全控制另一個進程的執(zhí)行(如Debug進程),此時控制進程希望能夠攔截另一個進程的所有異常唆缴,并能夠及時知道它的狀態(tài)改變鳍征。

系統(tǒng)進行進程間通信(IPC)的時候,可用的方式包括管道面徽、命名管道艳丛、消息隊列、信號趟紊、信號量氮双、共享內存、套接字(socket)等形式霎匈。

2.1消息隊列

消息隊列實際上就是一個鏈表戴差,而消息就是鏈表中具有特定格式和優(yōu)先級的記錄,對消息隊列有寫權限的進程可以根據一定規(guī)則在消息鏈表中添加消息铛嘱,對消息隊列有讀權限的進程則可以從消息隊列中獲得所需的信息暖释。

在某個進程往一個消息隊列寫入消息之前,并不需要另外某個進程在該隊列上等待消息的到達墨吓。對于消息隊列來說球匕,除非顯式刪除,否則其一直存在

php實現消息隊列操作

在php中通過這兩句話就可以創(chuàng)建一個消息隊列帖烘。 ftok 函數亮曹,是可以將一個路徑轉換成消息隊列可用的key值。 msg_get_queue函數的第一個參數 是消息隊列的key秘症,第二個參數是消息隊列的讀寫權限照卦,這個權限跟文件類似

msg_send函數,向指定消息隊列寫入信息乡摹。

msg_send ( resource $queue , int $msgtype , mixed $message [, bool $serialize = true [, bool $blocking = true [, int &$errorcode ]]] )

第1個參數 : resource $queue 表示要寫入的消息隊列資源役耕。

第2個參數 : int $msgtype 表示寫入消息隊列的 消息類型,這個參數是 配合 msg_receive讀取消息隊列函數 使用的聪廉,下面會說蹄葱。

第3個參數 : mixed $message 你要發(fā)送的信息,最大為 65536 個字節(jié)锄列。

第4個參數 : bool $serialize = true 為可選項图云,是否序列化你發(fā)送的消息。

第5個參數 : bool $blocking = true 是否阻塞邻邮,當你發(fā)送的消息很大竣况,而此時的消息隊列無法存入的時候,此時消息隊列就會阻塞筒严,除非等到有別的進程從消息隊列中讀取了別的消息丹泉,然后消息隊列有足夠的空間存儲你要發(fā)送的信息情萤,才能繼續(xù)執(zhí)行。你可以設置這個參數為false摹恨,這樣你發(fā)送信息就會失敗筋岛,此時錯誤信息會在 第6個參數 $errorcode中體現,錯誤碼為 MSG_EAGAIN 晒哄,你可以根據這個錯誤碼睁宰,重新發(fā)送你的消息。

第6個參數 : int &$errorcode 記錄寫入中出現的一系列錯誤寝凌。

讀取函數 msg_receive

msg_receive ( resource $queue , int $desiredmsgtype , int &$msgtype , int $maxsize , mixed &$message [, bool $unserialize = true [, int $flags = 0 [, int &$errorcode ]]] )

第1個參數:resource $queue 表示要讀取的消息隊列資源柒傻。

第2個參數 :int $desiredmsgtype 讀取的消息類型。這個參數為 0 的時候较木,你可以讀取 msg_send 以任意 消息類型 發(fā)送的消息红符。 如果此參數和你發(fā)送的某個消息類型相同,比如你有 2個消息伐债,一個是通過 1類型發(fā)送的预侯,一個是通過2 類型發(fā)送的。你用 0 可以接收這兩種消息 峰锁,而你用 1 只能接收到 以1類型發(fā)送的消息雌桑。

第3個參數 : int &$msgtype 你讀取到的信息,它發(fā)送時的消息類型會存儲在該參數中祖今。

第4個參數 : int $maxsize 你以多大的字節(jié)去讀取消息,如果這個值小于你要讀取的內容的長度拣技,你會讀取失敗千诬。

第5個參數 :mixed &$message 讀取的內容。

第6個參數 : bool $unserialize = true 內容是否序列化

第7個參數 :int $flags = 0 讀取標識膏斤。除了默認的0 之外徐绑,還有3個參數可選 MSG_IPC_NOWAIT 這個參數表示如果沒有從消息隊列中讀取到信息,會立馬返回莫辨,并返回錯誤碼 MSG_ENOMSG.

MSG_EXCEPT 這個參數 是配合 第2個參數使用的傲茄,如果使用這個參數,你讀取到的第一個參數沮榜,不是你第一個發(fā)送的參數盘榨。(隊列先進先出)

MSG_NOERROR 如果讀取的內容過大,而你指定的第4個參數又不夠的時候蟆融,它會截斷這個消息草巡,并且不報錯。

銷毀消息隊列的方法?:

msg_remove_queue($msg_queue);

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末型酥,一起剝皮案震驚了整個濱河市山憨,隨后出現的幾起案子查乒,更是在濱河造成了極大的恐慌,老刑警劉巖郁竟,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玛迄,死亡現場離奇詭異,居然都是意外死亡棚亩,警方通過查閱死者的電腦和手機蓖议,發(fā)現死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔑舞,“玉大人拒担,你說我怎么就攤上這事」パ” “怎么了从撼?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钧栖。 經常有香客問我低零,道長,這世上最難降的妖魔是什么拯杠? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任掏婶,我火速辦了婚禮,結果婚禮上潭陪,老公的妹妹穿的比我還像新娘雄妥。我一直安慰自己,他們只是感情好依溯,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布老厌。 她就那樣靜靜地躺著,像睡著了一般黎炉。 火紅的嫁衣襯著肌膚如雪枝秤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天慷嗜,我揣著相機與錄音淀弹,去河邊找鬼。 笑死庆械,一個胖子當著我的面吹牛薇溃,可吹牛的內容都是我干的。 我是一名探鬼主播缭乘,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼痊焊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起薄啥,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤辕羽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后垄惧,有當地人在樹林里發(fā)現了一具尸體刁愿,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年到逊,在試婚紗的時候發(fā)現自己被綠了铣口。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡觉壶,死狀恐怖脑题,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情铜靶,我是刑警寧澤叔遂,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站争剿,受9級特大地震影響已艰,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蚕苇,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一哩掺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涩笤,春花似錦嚼吞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锰茉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間切心,已是汗流浹背飒筑。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绽昏,地道東北人协屡。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像全谤,于是被迫代替她去往敵國和親肤晓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內容