由於php
語言不支援多執行緒,因此swoole
使用多程序模式。在多程序模式下存在程序記憶體隔離,在工作程序內修改global
全域性變數和超全域性變數時,在其他程序是無效的。
$fds = array();
$server->on('connect', function ($server, $fd)\n";
global $fds;
$fds = $fd;
var_dump($fds);
});
$fds
雖然是全域性變數,但只在當前的程序內有效。swoole
伺服器底層會建立多個worker
程序,在var_dump($fds)
列印出來的值,只有部分連線的fd
。
對應的解決方案就是使用外部儲存服務:
除了使用儲存之外,還可以使用共享記憶體來儲存資料
php
提供了多套共享記憶體的擴充套件,但實際上真正在實際專案中可用的並不多。
shm 擴充套件
提供了shm_put_var
/shm_get_var
共享記憶體讀寫方法。但其底層實現使用鍊錶結構,在儲存大量數值時時間複雜度為o(n)
,效能非常差。並且讀寫資料沒有加鎖,存在資料同步問題,需要使用者自行加鎖。
不推薦使用shmop 擴充套件
提供了shmop_read
/shmop_write
共享記憶體讀寫方法。僅提供了基礎的共享記憶體操作指令,並未提供資料結構和封裝。不適合普通開發者使用。
不推薦使用apcu 擴充套件
提供了apc_fetch
/apc_store
可以使用key-value
方式訪問。apc
擴充套件總體上是可以用於實際專案的,缺點是鎖的粒度較粗,在大量併發讀寫操作時鎖的碰撞較為密集。
swoole_tableyac
擴充套件,不適合用於儲存資料,其設計原理導致存在一定的資料miss
率,僅作為快取,不可作為儲存
swoole
官方提供的共享記憶體讀寫工具,提供了key-value
操作方式,使用非常簡單。底層使用自旋鎖實現,在大量併發讀寫操作時效能依然非常強勁。推薦使用。swoole_table
仍然存在乙個兩個缺點,使用時需要根據實際情況來選擇。
swoole多程序任務
swoole發展很快版本迭代也很快,是彌補了php的缺點,提公升了php的效能,唯一的不足就是文件太差了點,很多想入門的人在官方文件並不能夠順利的進行學習。我也是開始研究swoole的一些知識,下面是總結的swoole多程序的一些知識點。swoole多程序例子1 單程序傳送10封郵件 start t...
Swoole多程序的實現
使用swoole多程序上傳檔案到網宿伺服器 created by phpstorm.user leeo date 2016 9 29 time 15 26 引入檔案上傳類include once filehandleclass.php obj fetch new filehandleclass wo...
Swoole 多程序 簡單示例
一 任務 向使用者先傳送郵箱驗證碼,然後向使用者傳送手機驗證碼。如果是單程序,需要等待郵箱驗證碼傳送完畢才能傳送手機驗證碼,存在一定的耗時。可使用多程序 乙個程序傳送郵箱驗證碼,另乙個程序傳送手機驗證碼。info array email 11111111 qq.com phone 135999999...