热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Thinkphp6+swoole教程(四)配置、工作进程、协程以及理解Swoole进程模式

转载请注明:藏羚骸的博客~Thinkphp6swoole教程(四)配置、工作进程、协程以及理解Swoole进程模式.配置文件࿱

转载请注明: 藏羚骸的博客~Thinkphp6+swoole 教程(四)配置、工作进程、协程以及理解 Swoole 进程模式.

配置文件:

app/config/swoole.php

'server' => ['host' => env('SWOOLE_HOST', '0.0.0.0'), // 监听地址'port' => env('SWOOLE_PORT', 9501), // 监听端口'mode' => SWOOLE_PROCESS, // 运行模式 默认为SWOOLE_PROCESS'sock_type' => SWOOLE_SOCK_TCP, // sock type 默认为SWOOLE_SOCK_TCP'options' => [ // 都是给 Swoole 服务的配置,可以根据 Swoole 手册额外增加其它的 Swoole 配置'pid_file' => runtime_path() . 'swoole.pid', //服务启动以后进程 ID 存放文件'log_file' => runtime_path() . 'swoole.log', //Swoole 的日志文件'daemonize' => false, //守护进程模式设置,true 后台运行// Normally this value should be 1~4 times larger according to your cpu cores.'reactor_num' => swoole_cpu_num(), //后台启动的 Reactor 线程数'worker_num' => swoole_cpu_num(), //设置启动的 Worker 进程数'task_worker_num' => swoole_cpu_num(), //配置 Task 进程数'enable_static_handler' => true, //开启静态文件请求处理功能,需配合 document_root'document_root' => root_path('public'), //配置静态文件根目录'package_max_length' => 20 * 1024 * 1024, //设置最大数据包尺寸,单位为字节'buffer_output_size' => 10 * 1024 * 1024, //配置发送输出缓存区内存尺寸'socket_buffer_size' => 128 * 1024 * 1024, //用于设置客户端连接最大允许占用内存数量],
],

工作进程:

'worker_num' => swoole_cpu_num(),

这个配置是设置工作进程的, swoole_cpu_num() 是获取本机CPU核数,如果将它手动设置为 1,那么同一时间有两个请求需要处理,一次只能处理一个,另一个处于等候状态,第一个处理完后会紧接着处理第二个,但他们还是属于一个进程,两个请求的进程号是一样的。如何设置为 2,那么同时可以处理 2 个请求,并且有两个不同的进程号。

协程

在 Swoole 的配置文件中,还有一个选项,是配置协程的:

'coroutine' => ['enable' => true,'flags' => SWOOLE_HOOK_ALL,],

'enable' => true 代表开启协程。假设现在需要同时处理 3 个请求(也可以更多),即使工作进程设置为 1,这三个请求也可以同时进行处理,但是它们的进程号是一样的,因为工作进程还是一个。这就是 Swoole 协程的魅力。

理解 Swoole 进程模式

配置工作进程数为 1 ,然后通过命令 php think swoole 开启服务后,新开命令窗口执行 ps -ef | grep swoole 查看进程状态 ,如下图所示:

当 Swoole 启动时,会首先启动一个 master 主进程,然后会启动一个 manager 管理子进程,这两个进程不会去处理请求的工作,请求的处理交给 manager 的子进程 worker。上图中可见,master 主进程的进程号 30665,manager 子进程 30666 的父进程是 30665,task process 和 worker process 的父进程都是 30666。

配置工作进程数为 2 ,重启 Swoole 服务,再次查看进程状态:

可见,有两个 worker process 进程。

执行pstree -p 31568,可得到如下关系图:

转载请注明: 藏羚骸的博客~Thinkphp6+swoole 教程(四)配置、工作进程、协程以及理解 Swoole 进程模式. 


推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
  • 本文介绍了在CentOS 6.4系统中安装MySQL 5.5.37时遇到的启动失败和PID文件问题,并提供了详细的解决方案,包括日志分析、权限检查等步骤。 ... [详细]
  • 本文介绍了如何通过ARM编译器组件重定向标准C运行时库的I/O函数,以适应不同的硬件平台。原文链接:https://www.keil.com/pack/doc/compiler/RetargetIO/html/retarget_overview.html ... [详细]
  • Flowable系列教程:运用ProcessEngineConfigurator实现高级流程引擎配置
    本文探讨了通过ProcessEngineConfigurator接口实现对Flowable流程引擎的高级配置方法。这种方法允许开发者通过自定义配置器来增强或修改流程引擎的行为。 ... [详细]
  • 本文详细介绍了如何使用Python中的xlwt库将数据库中的数据导出至Excel文件,适合初学者和中级开发者参考。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 本文探讨了在React项目中实现子组件向父组件传递数据的方法,包括通过回调函数和使用React状态管理工具。 ... [详细]
  • Django xAdmin 使用指南(第一部分)
    本文介绍如何在Django项目中集成和使用xAdmin,这是一个增强版的管理界面,提供了比Django默认admin更多的功能。文中详细描述了集成步骤及配置方法。 ... [详细]
  • 本文详细介绍了Java中的`ByteArrayInputStream`和`ByteArrayOutputStream`,包括它们的基本概念、工作原理及具体应用实例。`ByteArrayInputStream`用于处理内存中的字节数组,而`ByteArrayOutputStream`则用于将数据写入内存中的字节数组。 ... [详细]
  • 深入理解Docker网络管理
    本文介绍了Docker网络管理的基本概念,包括为什么需要Docker网络管理以及Docker提供的多种网络驱动模式。同时,文章还详细解释了Docker网络相关的命令操作,帮助读者更好地理解和使用Docker网络功能。 ... [详细]
  • 任务,栈, ... [详细]
  • 作为一名拥有五年工作经验的开发人员,对产品设计和管理有着独到的见解。本文将分享腾讯暑期实习生面试的经历,涵盖笔试、群面、专业面试、总监面试及最终HR面试的全过程,希望能为即将面试的同学提供有价值的参考。 ... [详细]
  • 本文介绍了在Windows 7操作系统中设置电脑自动启动的步骤,包括通过BIOS设置来电启动以及使用任务计划程序实现定时开机的功能。此外,还提供了通过键盘、鼠标和网络唤醒等方式实现自动开机的多种方法。 ... [详细]
author-avatar
个信2502857367
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有