swoole支持多线程吗?

发布时间 - 2019-12-25 00:00:00    点击率:

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  # 全局变量  # 多线程  # 是一个  # 还可以  # 多个  # 推荐使用  # 很重要  # 不存在  # 较多  # 不支持 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Laravel如何实现模型的全局作用域?(Global Scope示例)  如何注册花生壳免费域名并搭建个人网站?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  详解jQuery停止动画——stop()方法的使用  html如何与html链接_实现多个HTML页面互相链接【互相】  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何在IIS中新建站点并配置端口与IP地址?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何快速搭建个人网站并优化SEO?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Linux安全能力提升路径_长期防护思维说明【指导】  详解CentOS6.5 安装 MySQL5.1.71的方法  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  JavaScript模板引擎Template.js使用详解  Laravel distinct去重查询_Laravel Eloquent去重方法  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  ,南京靠谱的征婚网站?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Laravel用户密码怎么加密_Laravel Hash门面使用教程  如何用PHP快速搭建CMS系统?  如何在云指建站中生成FTP站点?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  如何在万网ECS上快速搭建专属网站?  php json中文编码为null的解决办法  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何在宝塔面板中创建新站点?  Laravel如何使用模型观察者?(Observer代码示例)  网站建设要注意的标准 促进网站用户好感度!  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  如何在 Pandas 中基于一列条件计算另一列的分组均值  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  如何确保FTP站点访问权限与数据传输安全?  无锡营销型网站制作公司,无锡网选车牌流程?  Laravel如何使用Blade组件和插槽?(Component代码示例)  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?