Swoole的实现
最后更新于:2022-04-02 06:40:08
# Swoole的实现
[TOC]
`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`线程不会接受任何信号。
';