共享内存:跨worker进程通讯
打开了一块内存,多个worker进程可以同时访问,包括读取和写入。
问题:
1.锁。多个worker进程同时操作一块内存,就会出现竞争关系
nginx中的锁都是自选锁,而不是基于信号量
自选锁:当这块内存被worker1所使用时,worker2需要获取锁的时候,只要worker1没有释放锁,worker2会一直不停的请求这把锁。 使用自选锁要求所有的nginx模块必须快速使用共享内存,快速使用,快速释放
早期基于信号量的nginx锁:当worker1拿到这把锁时,worker2需要时,发现锁已经被拿走了,会就地休息,等待worker1释放锁
2.slab内存管理器(在Tengine中的slab_stat)
slot是一个内存块,大小是两倍上涨的,2字节,4字节,8字节.....
最多两倍内存消耗。适合小对象。避免碎片。避免重复使用