## swoole协程
### 1. 基础知识
#### 1.1 多协程之间调度
```php
<?php
$cid = go(function () {
echo "co 1 start\n";
co::yield();
echo "co 1 end\n";
});
go(function () use ($cid) {
echo "co 2 start\n";
co::sleep(1);
co::resume($cid);
echo "co 2 end\n";
});
// 输出结果:
co 1 start
co 2 start
co 1 end
co 2 end
```
说明:当a协程调用co::yield时让出执行权,即暂定执行,在b协程中调用co::resume恢复a协程执行,需要注意的是co::yield和co::resume必须成对使用,否则会有协程泄露
#### 1.2 通道
swoole的通道用于多协程之间的通信
### 2. 与go的比较
- swoole创建的通道chan,只能在coroutine中使用( must be called in the coroutine)
#### 3. 问题记录
- co执行顺序并不是想象中那样的协同执行,而是顺序执行,不应该是那个那个没io就自动切换到另一个co吗?为什么我sleep了,还是要等sleep完之后才能执行下一个co
### 4. 注意事项
- 通道在`Server`中使用时必须在`onWorkerStart`之后创建
- 通道已满时,自动yield当前协程,当其他协程消费数据后resume
- php
- 编译安装
- 基本概念
- 垃圾回收机制
- 生命周期
- zval底层实现
- c扩展开发
- gdb调试工具
- 自定义扩展简单demo
- 钩子函数
- 读取php.ini配置
- 数组
- 函数
- 类
- yaf扩展底层源码
- swoole扩展底层源码
- memoryGlobal内存池
- swoole协程使用记录
- 单点登录sso原理
- compser使用
- session实现机制
- c & linux
- gcc
- 指针
- 结构体,联合和位字段
- 宏定义井号说明
- printf家族函数和可变参数
- 共享函数
- 静态库和动态库
- makefile自动化构建
- 信号一
- 信号二
- inotify监控文件事件
- socket编程
- 简介
- UNIX DOMAIN
- Internet DOMAIN
- TCP/IP
- 文件IO多路复用
- 内存管理
- 进程组,会话和控制终端
- daemon守护进程
- 多进程
- 多线程
- 常用进制转换
- go
- 入门知识
- 字节和整数装换
- python
- redis
- 应用场景
- 消息队列
- 热点数据
- 扫码登录
- 订阅发布
- 次数限制
- 抢购超卖
- 持久化机制
- mysql
- 工作流程
- MyISAM和InnoDB区别
- 用户和权限管理
- 执行计划
- sql优化
- 事务和锁
- 慢查询日志
- case...when...then...end用法
- sql
- 参考
- linux
- 内核参数优化
- 防火墙设置
- docker
- docker入门知识
- 算法
- 多维数组合
- DFA算法
- 红包金额分配