14.9 小结

Nginx是一个能够并发处理几十万甚至几百万个TCP连接的高性能服务器,因此,在进行进程间通信时,必须充分考虑到不能过分影响正常请求的处理。例如,使用14.4节介绍的套接字通信时,套接字都被设为了无阻塞模式,防止执行时阻塞了进程导致其他请求得不到处理,又如,Nginx封装的锁都不会直接使用信号量,因为一旦获取信号量互斥锁失败,进程就会进入睡眠状态,这会导致其他请求“饿死”。

当用户开发复杂的Nginx模块时,可能会涉及不同的worker进程间通信,这时可以从本章介绍的进程间通信方式上进行选择,从使用上说,ngx_shmtx_t互斥锁和共享内存应当是第三方Nginx模块最常用的进程间通信方式了,ngx_shmtx_t互斥锁在实现中充分考虑了是否引发睡眠的问题,用户在使用时需要明确地判断出是否会引发进程睡眠。当然,如果不使用Nginx封装过的进程间通信方式,则需要注意跨平台,以及是否会阻塞进程的运行等问题。