话说第一门比较精通的语言,是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是单进程语言,但是也有办法支持多进程相关推荐

  1. C语言最大公约数求解办法及时间复杂度比较

    C语言最大公约数求解办法及时间复杂度比较 **1.暴力穷举法:** **2.辗转相除法:** **3.更相减损法:** - 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个 ...

  2. Go语言写的解析器(支持json,linq,sql,net,http等)

    Monkey程序语言 Monkey v2.0版本已发布. monkey v2.0 增加了如下内容: 新增 short arrow(->)支持(类似C#的lambda表达式) 增加 列表推导和哈希 ...

  3. c语言作业系统输出超限,C语言网Online Judge系统支持语言和编译说明

    Online Judge系统支持语言和编译情况: 语言 编译器 语言版本 编译参数 C gcc 4.6.3 C99 gcc Main.c -o Main -Wall -lm –static -std= ...

  4. php语言的form,PHP语言 HTTP请求类,支持GET,POST,Multipart、form-data

    本文主要向大家介绍了PHP语言 HTTP请求类,支持GET,POST,Multipart.form-data,通过具体的实例向大家展示,希望对大家学习php语言有所帮助. php HTTP请求类,支持 ...

  5. python语言包含的错误_Python语言环境错误:不支持的语言环境设置

    Python语言环境错误:不支持的语言环境设置 为什么在python中执行此操作时会出现以下错误: >>> import locale >>> print str( ...

  6. c语言编程暴力是什么意思,(C语言代码)用笨办法暴力出来的,但是还是希望给大家一点思路上的启发...

    #include int calc_factorial(int x)//计算某数阶乘 { int i,sum = 1; for(i = 1; i <= x; i++) { sum *= i; } ...

  7. Ubuntu下无法安装R语言vcd包解决办法

    文章目录 项目场景 问题描述 原因分析 解决方案 项目场景 使用 R 语言时需要用到 vcd 包,需要对其进行安装,其中我的系统版本是 Ubuntu20.04,在安装 vcd 包时出现了报错无法安装的 ...

  8. Origin(教育版)无法更改语言是灰色的办法

    用edu后缀的邮箱可以申请正版Origin pro,但是本人下载下来后是英文版,绘图的时候里面很多的专有名词真的一头雾水,查看网上的教程说修改注册表,试了后发生错误,再次打开还是原封不动的英文版.又搜 ...

  9. Python语言环境错误:不支持的语言环境设置

    本文翻译自:Python locale error: unsupported locale setting Why do I get the following error when doing th ...

  10. 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )

    文章目录 一.创建支持 Kotlin 的 NDK 项目 二.Kotlin 语言中使用 NDK 要点 1.加载动态库 2.声明 ndk 方法 3.Project 下的 build.gradle 配置 4 ...

最新文章

  1. Numpy 广播机制(两个不同维度对象进行数学运算)
  2. Openfiler 2.3配置及Win2k8 iSCSI应用系列之二
  3. 使用Eclipse+PyDev+EclipseHtmlEditor搭建Django开发环境
  4. OpenCV单kinect多帧静止场景的深度图像去噪
  5. KindEditor 在线编辑器
  6. 职场必备:公司高层职位的英文缩写
  7. TableviewController基础
  8. 销售数据分析这么做,领导不重用你都难
  9. linux系统显卡驱动下载官网,NVIDIA显卡Linux系统驱动313.09版下载
  10. 一次网站登录慢故障排查
  11. 如何将.frm,.MYD,.MYI文件导入数据库
  12. 工作内存与主内存是什么,硬件层面的存储架构是什么样,线程的实现原理是什么
  13. iOS 13获取keyWindow
  14. 办公一般用什么邮箱?办公邮箱价格哪个好?办公邮箱怎么登陆?
  15. 使用CSS绘制几何图形(圆形、三角形、扇形、菱形等
  16. SQLServer截取字符串常用函数
  17. 计算机基础知识比赛主持稿,计算机基础技能大赛.doc
  18. html5链接access数据库,JDBC连接Access数据库的几种方式详解
  19. c语言编写水仙花数代码
  20. python画名侦探柯南_【儿童节特辑】风格迁移——让你的照片秒变手绘日漫风

热门文章

  1. 方正税控计算机配置,方正计算机U盘启动优先级的BIOS设置说明_IT /计算机_信息...
  2. Vue-网页版音乐播放器实现(网易云音乐源)
  3. [解决]Windows 8 丢失 MSVCR71.dll 或 MSVCP71.dll
  4. mac vs 返回上一步_mac 后退一步 快捷键
  5. 第21集丨问君何能尔?心远地自偏
  6. 2020浙江大学软件学院软件工程考研经验分享
  7. H5js前端压缩图片
  8. Youtube油管视频类别标签列表
  9. 异常:Handler sending message to a Handler on a dead thread
  10. 等差数列及等比数列求和公式