[TOC]
## 线程与进程的区别
* 多个线程是在同一个进程内的,线程之间可以共享内存变量而实现线程间的通信。
* 线程比进程更加轻量级,进程要比线程更加消耗系统资源。
> 多线程存在的问题主要有
* 线程读写变量存在着同步问题需要加锁
* 锁粒度过大会存在性能问题,会导致只有一个线程在运行,其它线程都在等待锁,也就无法实现并行。
* 同时使用多个锁时逻辑复杂,一旦某个锁没有被正确释放可能会发生线程死锁。
* 某个线程发生致命错误会导致整个进程崩溃
> 相对而言多进程更为稳定,可利用进程间通信`IPC`技术实现数据共享。多进程通信的方式主要包括
* 共享内存
共享内存和线程间读写变量时一样的,都需要加锁,同时也存在同步、死锁等问题。
* 消息队列
消息队列采用多个子进程抢占队列的模式,性能较好。
* 管道、UnixSock、TCP、UDP
可以使用`read/write`来传递数据,TCP/UDP使用socket来通信,子进程可以分布运行。
## PHP 多进程案例
~~~
public function actionTest()
{
$procNum = 150; // 150个进程
for($i = 0; $i < $procNum; $i++){
$PID = pcntl_fork(); //创建子进程
if ($PID == 0){
doFunc();
exit();
} elseif ($PID == -1) {
die('could not fork');
} else {
// 如果在这里写 pcntl_wait($status),则只有当前进程执行完毕后才会创建下一个进程
}
}
echo 'done';
}
public function doFunc(){
echo 'haha';
}
~~~
## 创建多进程的返回值
~~~
public function actionTest3()
{
$nPID = pcntl_fork();//创建子进程
var_dump($nPID);
}
~~~
> 返回值
![](https://img.kancloud.cn/ac/b0/acb0ebdc0879d9749567b15911c9a067_565x58.png)
- 重点知识预览
- 理解面向对象
- 魔术变量
- 魔法方法
- 面试题基础篇
- PSR标准
- class (单继承)
- trait (多继承)
- 匿名函数
- 日期处理
- 文件处理
- 字符串处理
- BC Math
- 数组处理
- HTTP的各个状态
- PHP环境变量
- session & cookie
- composer
- 变量的类型转换和判断类型方法
- PHP的错误和异常处理
- PHP的ob缓冲区
- PHP内存调试
- pcntl多进程
- PHP yield (生成器):节约内存
- Nginx负载均衡
- 同一台服务器如何测试负载均衡
- 安全方面
- HTTPS实现
- PHP性能分析(xhprof)
- 高并发雪崩解决方法
- 接口加密设计(安全性)
- 数据库(重要数据操作)日志记录规范
- APP发版操作
- 缓存使用
- Memcache
- MYSQL缓存
- Redis
- 安装与使用
- redis过期策略和内存淘汰机制
- Redis分布式锁
- Redis雪崩、穿透、击穿问题
- redis主从
- redis哨兵
- opcache
- 消息队列
- Redis消息队列
- Beanstalkd
- 数据库汇总
- MYSQL哪些情况下会忽略索引
- MYSQL常用命令
- SQL高级运用
- MYSQL分布式集群使用
- 主从复制
- 同一台服务器如何测试主从同步
- MYSQL索引类型
- MYSQL分区
- 锁机制
- 事务隔离级别(脏读、幻读、不可重复读)
- 分布式事务
- MYSQL性能优化
- swoole
- 安装以及升级
- swoole进程初识
- TCP相关教程
- TCP数据传输DEMO(含同步、异步、长连接)
- Server异步投递task任务
- TCP粘包问题
- websocket相关教程
- websocket初体验DEMO
- websocket核心功能(心跳检测、用户校验、重连机制)
- websocket用户之间通信DEMO
- 定时器的使用
- 常驻内存以及如何避免内存泄漏
- max_request使用实例
- 守护进程、信号和平滑重启
- 全文检索工具
- MYSQL全文索引
- ElasticSearch全文检索
- ES基础知识
- Mapping及增删改查
- DSL查询语法
- 搜索建议 (completion)
- mysql转dsl工具
- ES的安装与PHP测试
- kibana可视化工具
- ELK日志管理系统
- PHP设计模式
- 创建型模式
- 工厂模式
- 单例模式
- 注册器模式
- 工厂模式于策略模式的区别
- 结构型模式
- 适配器模式
- 桥接模式
- 装饰器模式
- 行为型模式
- 观察者模式
- 策略模式
- 高并发设计