php是单进程语言,但是也有办法支持多进程
话说第一门比较精通的语言,是go。但用的最久的语言,目前来看是php,别问我的技术生涯规划是怎样的,我可能只是想在养活自己的同时凭喜好接触更多语言。
那么今天闲来无事说一下对php的理解,如果用一句话概括:这的确是一门好上手的语言。只要你还稍微有点执行力,稍微懂一点计算机网络,数据库基础还有php语法,应该就可以写出诸多类型的程序了。因为是在大公司任职,又一直使用框架,php是如何与nginx交互的,如何连上数据库的这些问题统统没细想,更别说在后台cli模式下编写多进程程序或者守护进程了。所以做了好几个月的php开发时,只是记得php是一门单进程弱类型的语言,却不怎么理解。感觉很多初入行的程序员都会有很长一段时间内,做简单重复得工作,却不知自己该往哪些方向钻研,还觉得自己什么都不会。这个时候,就只能是日积月累多坚持了。
这里,我先普及一下php实现多进程的方式,因为最近刚好复习到这里。即便你是连进程和线程都分不清的菜鸟,那这篇文章对你也不怎么有用,因为我讲的并不详细,只是想随便说个例子来督鼓励一下大家的学习。咳咳,那么现在开始,要想写出一个php多进程的程序,其实就像把大象放在冰箱里有几步一样简单。php实现多进程简单来说就三步:创建子进程,管理子进程,处理子进程。说起来简单,其中涉及到的知识却是不少,比如说你得知道每个进程都有一个进程号(pid),还得知道命令行是如何执行php文件之类的。
第一步的创建子进程,用到的是pcntl_fork()函数,函数返回值通常为0,失败时返回-1。我先举一个创建子进程的直观小栗子(抄袭):
$ppid = posix_getpid();$pid = pcntl_fork();if ($pid == -1) {throw new Exception('fork子进程失败!');} elseif ($pid > 0) {cli_set_process_title("我是父进程,我的进程id是{$ppid}."); sleep(30); // 保持30秒,确保能被ps查到} else {$cpid = posix_getpid();cli_set_process_title("我是{$ppid}的子进程,我的进程id是{$cpid}.");sleep(30);}
第二步的管理子进程,使用的是信号。简单来说,就是父进程里使用两个函数pcntl_signal()和pcntl_signal_dispatch,负责给子进程安装信号处理器和分发工作。 这个步骤就先如此简单介绍一下,因为涉及到一个回调函数的概念,以后我会补上更全面地内容。
第三步的处理子进程,也是需要两个函数。一个是发送终止信号的posix_kill()函数,一个是等待子进程状态的pcntl_waitpid()函数,这样就可以实现跟子进程共同完成的任务的目的了。
所以,后端开发就是这样,很多以为会复杂的东西,其实步骤很清晰,基本都属于用到的知识多,用到的函数却不多这样。所以入门的时候就硬着头皮学下去好了,要相信自己总有一天可以很清楚明白。
php是单进程语言,但是也有办法支持多进程相关推荐
- C语言最大公约数求解办法及时间复杂度比较
C语言最大公约数求解办法及时间复杂度比较 **1.暴力穷举法:** **2.辗转相除法:** **3.更相减损法:** - 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个 ...
- Go语言写的解析器(支持json,linq,sql,net,http等)
Monkey程序语言 Monkey v2.0版本已发布. monkey v2.0 增加了如下内容: 新增 short arrow(->)支持(类似C#的lambda表达式) 增加 列表推导和哈希 ...
- c语言作业系统输出超限,C语言网Online Judge系统支持语言和编译说明
Online Judge系统支持语言和编译情况: 语言 编译器 语言版本 编译参数 C gcc 4.6.3 C99 gcc Main.c -o Main -Wall -lm –static -std= ...
- php语言的form,PHP语言 HTTP请求类,支持GET,POST,Multipart、form-data
本文主要向大家介绍了PHP语言 HTTP请求类,支持GET,POST,Multipart.form-data,通过具体的实例向大家展示,希望对大家学习php语言有所帮助. php HTTP请求类,支持 ...
- python语言包含的错误_Python语言环境错误:不支持的语言环境设置
Python语言环境错误:不支持的语言环境设置 为什么在python中执行此操作时会出现以下错误: >>> import locale >>> print str( ...
- c语言编程暴力是什么意思,(C语言代码)用笨办法暴力出来的,但是还是希望给大家一点思路上的启发...
#include int calc_factorial(int x)//计算某数阶乘 { int i,sum = 1; for(i = 1; i <= x; i++) { sum *= i; } ...
- Ubuntu下无法安装R语言vcd包解决办法
文章目录 项目场景 问题描述 原因分析 解决方案 项目场景 使用 R 语言时需要用到 vcd 包,需要对其进行安装,其中我的系统版本是 Ubuntu20.04,在安装 vcd 包时出现了报错无法安装的 ...
- Origin(教育版)无法更改语言是灰色的办法
用edu后缀的邮箱可以申请正版Origin pro,但是本人下载下来后是英文版,绘图的时候里面很多的专有名词真的一头雾水,查看网上的教程说修改注册表,试了后发生错误,再次打开还是原封不动的英文版.又搜 ...
- Python语言环境错误:不支持的语言环境设置
本文翻译自:Python locale error: unsupported locale setting Why do I get the following error when doing th ...
- 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )
文章目录 一.创建支持 Kotlin 的 NDK 项目 二.Kotlin 语言中使用 NDK 要点 1.加载动态库 2.声明 ndk 方法 3.Project 下的 build.gradle 配置 4 ...
最新文章
- Numpy 广播机制(两个不同维度对象进行数学运算)
- Openfiler 2.3配置及Win2k8 iSCSI应用系列之二
- 使用Eclipse+PyDev+EclipseHtmlEditor搭建Django开发环境
- OpenCV单kinect多帧静止场景的深度图像去噪
- KindEditor 在线编辑器
- 职场必备:公司高层职位的英文缩写
- TableviewController基础
- 销售数据分析这么做,领导不重用你都难
- linux系统显卡驱动下载官网,NVIDIA显卡Linux系统驱动313.09版下载
- 一次网站登录慢故障排查
- 如何将.frm,.MYD,.MYI文件导入数据库
- 工作内存与主内存是什么,硬件层面的存储架构是什么样,线程的实现原理是什么
- iOS 13获取keyWindow
- 办公一般用什么邮箱?办公邮箱价格哪个好?办公邮箱怎么登陆?
- 使用CSS绘制几何图形(圆形、三角形、扇形、菱形等
- SQLServer截取字符串常用函数
- 计算机基础知识比赛主持稿,计算机基础技能大赛.doc
- html5链接access数据库,JDBC连接Access数据库的几种方式详解
- c语言编写水仙花数代码
- python画名侦探柯南_【儿童节特辑】风格迁移——让你的照片秒变手绘日漫风
热门文章
- 方正税控计算机配置,方正计算机U盘启动优先级的BIOS设置说明_IT /计算机_信息...
- Vue-网页版音乐播放器实现(网易云音乐源)
- [解决]Windows 8 丢失 MSVCR71.dll 或 MSVCP71.dll
- mac vs 返回上一步_mac 后退一步 快捷键
- 第21集丨问君何能尔?心远地自偏
- 2020浙江大学软件学院软件工程考研经验分享
- H5js前端压缩图片
- Youtube油管视频类别标签列表
- 异常:Handler sending message to a Handler on a dead thread
- 等差数列及等比数列求和公式