Reactor執行緒
Swoole\Server的主程序是一個多執行緒的程式。其中有一組很重要的線程,稱為Reactor線程。它就是真正處理TCP連接,收發資料的線程。
Swoole的主線程在Accept新的連接後,會將這個連接分配給一個固定的Reactor線程,並由這個線程負責監聽此socket。在socket可讀時讀取數據,並進行協定解析,將請求投遞到Worker進程。在socket可寫入時將資料傳送給TCP客戶端。
分配的計算方式是fd % serv->reactor_num
#由於PHP語言不支援多執行緒,因此Swoole使用多進程模式。在多進程模式下存在進程記憶體隔離,在工作進程內修改global全域變數和超全域變數時,在其他行程是無效的。
設定worker_num=1時,不存在進程隔離,可以使用全域變數儲存資料
進程隔離
$fds = array(); $server->on('connect', function ($server, $fd){ echo "connection open: {$fd}\n"; global $fds; $fds[] = $fd; var_dump($fds); });
$fds 雖然是全域變量,但只在目前的進程內有效。 Swoole伺服器底層會建立多個Worker進程,在var_dump($fds)列印出來的值,只有部分連接的fd。
對應的解決方案就是使用外部儲存服務:
#資料庫,如:MySQL、MongoDB
快取伺服器,如:Redis、Memcache
磁碟文件,多進程並發讀寫時需要加鎖
普通的資料庫和磁碟檔案操作,存在較多IO等待時間。因此建議使用:
Redis 記憶體資料庫,讀寫速度非常快
/dev/shm 記憶體檔案系統,讀寫操作全部在記憶體中完成,無IO消耗,效能極高
除了使用儲存之外,還可以使用共享記憶體來保存資料
推薦學習: swoole影片教學
以上是swoole支援多執行緒嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中