您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
9-8 动态语言层的并发处理视频
发布时间:2020-10-17 17:45:52编辑:雪饮阅读()
创建子进程
<?php
//stream_socket_server - 创建一个Internet或Unix域服务器套接字
$sockserv=stream_socket_server('tcp://0.0.0.0:8000',$errno,$errstr);
for($i=0;$i<5;$i++){
//当:pcntl_fork()函数执行的时候,会创建一个子进程。
//子进程会复制当前进程,也就是父进程的所有:数据,代码,还有状态。
if(pcntl_fork()==0){
//这里true是因为子进程创建成功后并不知道何时会有人连接该子进程,所以要一直true
while(true){
//stream_socket_accept — 接受由 stream_socket_server() 创建的套接字连接
$conn=stream_socket_accept($sockserv);
if($conn==false){
continue;
}
//接受到一个连接资源,然后读取资源,并不知道资源有多大,所以随便定义一个读取长度
$request=fread($conn,9000);
//我们也可以给该子进程一个响应(写回去)
$response='hello';
fwrite($conn,$response);
fclose($conn);
}
}
}
?>
运行示例:
[root@localhost ~]# /usr/local/php/bin/php demo5.php
[root@localhost ~]# ps -ef | sort -k 5 -r
UID PID PPID C STIME TTY TIME CMD
root 1454 1219 0 04:13 pts/0 00:00:00 sort -k 5 -r
root 1453 1219 0 04:13 pts/0 00:00:00 ps -ef
root 1450 2 0 04:12 ? 00:00:00 [kworker/3:0]
root 1438 1432 0 04:11 ? 00:00:00 sleep 300
root 1449 2 0 04:11 ? 00:00:00 [kworker/0:0]
root 1432 1398 0 04:11 ? 00:00:00 /bin/sh /etc/cron.daily/rhsmd
root 1398 1354 0 04:11 ? 00:00:00 /bin/bash /bin/run-parts /etc/cron.daily
root 1433 1398 0 04:11 ? 00:00:00 awk -v progname=/etc/cron.daily/rhsmd progname { ???? print progname ":\n" ???? progname=""; ??? } ??? { print; }
root 1397 2 0 04:07 ? 00:00:00 [kworker/3:2]
root 1396 2 0 04:06 ? 00:00:00 [kworker/0:2]
root 1372 1 0 04:02 pts/0 00:00:00 /usr/local/php/bin/php demo5.php
root 1371 1 0 04:02 pts/0 00:00:00 /usr/local/php/bin/php demo5.php
root 1370 1 0 04:02 pts/0 00:00:00 /usr/local/php/bin/php demo5.php
root 1369 1 0 04:02 pts/0 00:00:00 /usr/local/php/bin/php demo5.php
root 1368 1 0 04:02 pts/0 00:00:00 /usr/local/php/bin/php demo5.php
这里需要了解下e、f、k 5 r这几个参数
ps , -e 是显示所有进程,f 显示程序间的关系
sort,-k :以那个区间 (field) 来进行排序的意思,5则是指定第5字段即时间字段,-r :反向排序
可以看到上面5个进程成功被建立。
关键字词:stream_socket_server,pcntl_fork,stream_socket_accept
上一篇:9-7 动态语言静态化
相关文章
-
无相关信息