- Swoole的实现
- socket部分
- IO事件循环
- 多进程/多线程
- EventFd
- SIgnalfd
Swoole的实现
Swoole
使用C/C++ 11
编写,不依赖其他第三方库。
- swoole并没有用libevent,所以不需要安装libevent
- swoole并不依赖php的stream/sockets/pcntl/posix/sysvmsg等扩展
socket部分
swoole使用底层的socket系统调用。参见 sys/socket.h
IO事件循环
- 在
Linux
系统下使用epoll
,‵MacOS/FreeBSD下使用
kqueue` - task进程没有事件循环,进程会循环阻塞读取管道
有很多人使用strace -p去查看swoole主进程只能看到poll系统调用。正确的查看方法是strace -f -p
多进程/多线程
- 多进程使用
fork()
系统调用 - 多线程使用
pthread
线程库
EventFd
Swoole使用了eventfd
作为线程/进程间消息通知的机制。
SIgnalfd
Swoole中使用了signalfd
来实现对信号的屏蔽和处理。可以有效地避免线程/进程被信号打断,系统调用restart
的问题。在主进程中Reactor
/AIO
线程不会接受任何信号。