php swoole多进程/多线程用法示例【基于php7nts版】

2025-05-29 0 26

本文实例讲述了php swoole多进程/多线程用法。分享给大家供大家参考,具体如下:

swoole的多线程其实就是多进程,进程创建太多切换的开销很大,如果能用上pthreads建议用pthreads,因为我用的是php7nts版本没办法用pthreads

swoole实例如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54
<?php

/**

* 创建多进程

*/

$worker_num = 6; // 默认进程数

$workers = []; // 进程保存

$redirect_stdout = false; // 重定向输出 ; 这个参数用途等会我们看效果

for($i = 0; $i < $worker_num; $i++){

$process = new swoole_process('callback_function', $redirect_stdout);

// 启用消息队列 int $msgkey = 0, int $mode = 2

$process->useQueue(0, 2);

$pid = $process->start();

// 管道写入内容

$process->write('index:'.$i);

$process->push('进程的消息队列内容');

// 将每一个进程的句柄存起来

$workers[$pid] = $process;

}

/**

* 子进程回调

* @param swoole_process $worker [description]

* @return [type] [description]

*/

function callback_function(swoole_process $worker)

{

$recv = $worker->pop();

echo "子输出主内容: {$recv}".PHP_EOL;

//get guandao content

$recv = $worker->read();

$result = doTask();

echo PHP_EOL.$result.'==='.$worker->pid.'==='.$recv;

$worker->exit(0);

}

/**

* 监控/回收子进程

*/

while(1){

$ret = swoole_process::wait();

if ($ret){// $ret 是个数组 code是进程退出状态码,

$pid = $ret['pid'];

echo PHP_EOL."Worker Exit, PID=" . $pid . PHP_EOL;

}else{

break;

}

}

/**

* doTask

* @return [type] [description]

*/

function doTask()

{

sleep(2);

return true;

}

希望本文所述对大家PHP程序设计有所帮助。

原文链接:https://blog.csdn.net/fangdong88/article/details/78050135

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 php swoole多进程/多线程用法示例【基于php7nts版】 https://www.kuaiidc.com/92606.html

相关文章

发表评论
暂无评论