swoole快速入門11 多程序共享資料

2021-08-28 03:51:17 字數 1381 閱讀 3559

由於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擴充套件總體上是可以用於實際專案的,缺點是鎖的粒度較粗,在大量併發讀寫操作時鎖的碰撞較為密集。

yac擴充套件,不適合用於儲存資料,其設計原理導致存在一定的資料miss率,僅作為快取,不可作為儲存

swoole_table

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...