资讯动态

单进程的术语大全的庖丁解牛

发布时间:2026/10/16 19:57:48 来源:尧图企业网站定制
核心内核单进程就是程序在操作系统里只创建一个进程实例整个程序所有逻辑、内存、文件描述符全部归属这一个进程。类比一间独立小作坊只有一个车间一套工作台所有活都在这个车间里完成没有新开别的车间。PHP-CLI简单脚本、Nginx单进程模式、早期简单服务都是单进程。单进程不等于单线程一个进程内部可以开多个线程。**一、本源基础术语进程 Process操作系统资源分配的最小单位拥有独立虚拟内存空间、独立文件描述符表、pid。单进程 Single Process程序运行期间操作系统中仅有一个pid代表本程序不会fork生成多个子进程。所有业务逻辑跑在这一个进程内部。pid 进程ID内核分配给进程的唯一编号单进程程序只有唯一pid。进程虚拟地址空间单进程独享一整套虚拟内存代码段、数据段、堆、栈、共享库。进程之间内存隔离别的进程不能直接读写它的内存。单进程多线程一个进程内部创建多个线程线程共享进程的堆、文件描述符每个线程拥有独立栈。Swoole单进程多线程模型就是这个。单进程单线程进程内只有一条执行流同一时刻只能执行一段代码。简单PHP CLI脚本默认是单进程单线程。二、单进程内部内存分区术语代码段 Text段存放编译后的程序指令只读进程内所有线程共享。数据段 Data段全局变量、静态变量。程序启动就分配。堆 heap动态申请内存PHP new、malloc向上增长进程内所有线程共享。堆内存由程序自己管理。栈 stack函数调用、局部变量每个线程独立栈函数退出自动回收。共享库 / so动态链接库加载到进程虚拟地址空间多个进程可以复用同一份库代码。三、单进程的资源术语文件描述符表 fd table进程私有这个进程打开的socket、文件、管道全部记录在这张表里。单进程所有IO资源都在这一张fd表ulimit限制就是限制这个进程最大fd数量。打开文件资源所有数据库连接、日志文件、网络socket全部归属这一个进程。进程退出内核自动关闭这个进程全部fd释放资源。信号掩码 signal mask单进程拥有独立信号处理配置。操作系统发送信号SIGINT、SIGTERM由这个进程注册的回调处理。进程资源限制 ulimit限制这个单进程最大打开fd、最大内存、最大CPU时间。四、执行模型术语串行执行单进程单线程代码顺序执行同一时间只能处理一件任务。一个IO阻塞整个程序卡住。PHP普通CLI脚本。事件驱动单进程Reactor单进程内部用epoll监听fd非阻塞IO。不用多进程多线程在一个进程内同时处理大量连接。Redis就是经典单进程单线程Reactor。注意Redis主线程单进程单线程但后台还有独立子进程做RDB/AOF持久化。任务切换线程切换单进程多线程场景CPU在进程内不同线程之间切换属于线程上下文切换开销远小于进程上下文切换。事件循环 Event Loop单进程事件驱动程序的核心循环等待IO事件事件就绪执行回调循环往复。五、单进程的优缺点术语资源开销低不需要创建多个进程没有多进程之间进程上下文切换的巨大开销内存只有一份进程虚拟空间。内存共享简单同一个进程内多个线程天然共享堆内存不用进程间通信IPC读写共享内存直接访问变量。代价需要加锁防止竞态。单点故障致命短板只有一个进程。进程一旦崩溃整个服务直接全部停止。没有别的进程兜底。Redis主线程crash服务就不可用。无法利用多核CPU单进程单线程同一时刻只能跑在一个CPU核心就算机器有8核其余核心闲置。CPU密集型场景性能上不去。单进程多线程可以利用多核线程会被调度到不同核心。阻塞传染单进程单线程模型如果业务代码发生阻塞sleep、同步磁盘IO整个事件循环卡住所有连接全部暂停处理。六、进程间通信IPC单进程一般不用IPC进程间通信用于多个进程交换数据。管道、消息队列、共享内存、socket。单进程内部线程通信直接读写共享变量不需要IPC。fork创建子进程一旦fork就不再是单进程模型。fork之后变成父子两个独立进程。七、和多进程模型对比术语多进程模型启动多个独立进程每个进程有独立pid、独立虚拟内存。PHP-FPM就是多进程。进程之间内存隔离。进程上下文切换操作系统从进程A切到进程B需要切换整个虚拟内存页表开销很高。单进程模型没有进程上下文切换。写时复制 COWfork子进程时的机制父子进程一开始共享内存一方修改内存才复制页面。单进程不存在COW。八、工程场景术语Redis单进程主线程经典面试例子Redis网络事件、命令解析都在单进程单线程持久化交给fork出来的子进程。PHP单进程SwooleSwoole可以配置单进程多线程模式一个进程内开启多个worker线程。守护进程daemon单进程也可以变成daemon脱离终端后台运行。内存泄漏单进程长时间运行持续申请内存不释放内存只会持续上涨。没有其他进程分担只能重启进程释放全部内存。九、认知误区术语误区单进程单线程纠正单进程只是只有一个进程内部可以多个线程。进程和线程是两层概念。误区单进程就不能用多核CPU纠正单进程多线程可以调度到多个CPU核心单进程单线程只能占用单个核心。误区单进程一定性能差纠正IO密集型场景事件驱动单进程单线程性能极高Redis瓶颈不在CPU在网络IO。CPU密集型场景才受限于单核。误区单进程内部线程崩溃不影响整个进程纠正一个线程段错误crash整个进程直接退出所有线程一起挂掉。误区单进程不能监听多个socket纠正epoll可以在一个进程里监听成千上万个fd同时管理大量TCP连接Redis就是这样。类比串联单进程 一间独立作坊进程作坊本身拥有独立厂房虚拟内存单进程单线程作坊里面只有1个工人一次只能干一件活遇到等待IO工人原地不动所有任务停滞单进程多线程作坊里多个工人共用同一套仓库堆内存每个人有自己的工作台线程栈事件循环工人不停看消息看板epoll哪个订单就绪处理哪个单点故障作坊一旦失火所有工作全部停止多进程开很多间独立作坊每一间互相隔离一间着火其他还能继续干活。庖丁解牛一句话总结单进程指操作系统只分配一个pid、一套独立虚拟内存空间的程序实例单进程可以是单线程也可以是多线程单进程单线程无法利用多核CPU事件驱动单进程模型擅长IO密集场景无进程上下文切换开销缺点是单点故障进程崩溃服务整体不可用。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑