swoole是多进程还是多线程

广告:宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取~~~

swoole是多进程还是多线程

由于PHP语言不支持多线程,因此Swoole使用多进程模式。在多进程模式下存在进程内存隔离,在工作进程内修改global全局变量和超全局变量时,在其他进程是无效的。 (推荐学习: swoole视频教程)

设置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是多进程还是多线程的详细内容,更多请关注9543建站博客其它相关文章!

9543建站博客
一个专注于网站开发、微信开发的技术类纯净博客。
作者头像
admin创始人

肥猫,知名SEO博客站长,14年SEO经验。

上一篇:php $_get 获取的值为什么是空数组
下一篇:对比一下:smarty和thinkphp都要学吗

发表评论

关闭广告
关闭广告