400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

swoole中进程和线程的示例分析-创新互联

这篇文章主要介绍swoole中进程和线程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

创新互联-专业网站定制、快速模板网站建设、高性价比夏县网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式夏县网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖夏县地区。费用合理售后完善,十余年实体公司更值得信赖。
进程

1、进程之间不共享任何状态
2、进程的调度由操作系统完成
3、每个进程都有自己独立的内存空间
4、进程间通讯主要是通过信号传递的方式来实现的,实现方式有多种,信号量、管道、事件等,任何一种方式的通讯效率都需要过内核,导致通讯效率比较低
5、由于是独立的内存空间,上下文切换的时候需要保存先调用栈的信息、cpu各寄存器的信息、虚拟内存、以及打开的相关句柄等信息,所以导致上下文进程间切换开销很大,通讯麻烦。

线程

1、线程之间共享变量,解决了通讯麻烦的问题对于变量的访问需要锁
2、一个进程可以拥有多个线程,但是其中每个线程会共享父进程像操作系统申请资源,这个包括虚拟内存、文件等,由于是共享资源,所以创建线程所需要的系统资源占用比进程小很多,相应的可创建的线程数量也变得相对多很多。
3、另外在调度方面也是由于内存是共享的,所以上下文切换的时候需要保存的东西就像对少一些,这样一来上下文的切换也变得高效。

解释
swoole进程

swoole中进程和线程的示例分析
1、Master进程:主进程
2、Manger进程:管理进程
3、Worker进程:工作进程
4、Task进程:异步任务工作进程

client跟server的交互:

1、client请求到达 Main Reactor,Client实际上是与Master进程中的某个Reactor线程发生了连接。

2、Main Reactor根据Reactor的情况,将请求注册给对应的Reactor (每个Reactor都有epoll。用来监听客户端的变化)

3、客户端有变化时Reactor将数据交给worker来处理

4、worker处理完毕,通过进程间通信(比如管道、共享内存、消息队列)发给对应的reactor。

5、reactor将响应结果发给相应的连接请求处理完成

Master进程内的回调函数
Manager进程内的回调函数
Worker进程内的回调函数
Task进程内的回调函数
简单说明:
swoole运行流程图

swoole中进程和线程的示例分析

set([
    'worker_num'=>3, //设置进程
    //'heartbeat_idle_time'=>10,//连接较大的空闲时间
    //'heartbeat_check_interval'=>3 //服务器定时检查
    'open_length_check'=>1,
    'package_length_type'=>'N',//设置包头的长度
    'package_length_offset'=>0, //包长度从哪里开始计算
    'package_body_offset'=>4,  //包体从第几个字节开始计算
    'package_max_length'=>1024 * 1024 * 2,]);$server->on("Start",function (){

    var_dump(1);
     //设置主进程的名称
     swoole_set_process_name("server-process:master");});//服务关闭时候触发(信号)$server->on("shutdown",function (){});//当管理进程启动时调用它$server->on('ManagerStart',function (){
    var_dump(2);
    //swoole_set_process_name("server-process:manger");});$server->on('WorkerStart',function ($server,$workerId){
   // swoole_set_process_name("server-process:worker");
    var_dump(3);});//监听事件,连接事件(woker进程当中)$server->on('connect',function ($server,$fd){
    echo "新的连接进入:{$fd}".PHP_EOL;});//消息发送过来(woker进程当中)$server->on('receive',function (swoole_server $server, int $fd, int $reactor_id, string $data){
    //var_dump("消息发送过来:".$data);
    //服务端});//消息关闭$server->on('close',function (){
    echo "消息关闭".PHP_EOL;});//服务器开启$server->start();echo '123456';

以上是“swoole中进程和线程的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


本文名称:swoole中进程和线程的示例分析-创新互联
网址分享:http://mbwzsj.com/article/peghc.html

其他资讯

让你的专属顾问为你服务