什么是背压
在异步场景下,被观察者(生产者)发射事件(数据)的速度过快,导致观察者(消费者)处理事件(数据)不及时,从而造成 Buffer 溢出。对于这种现象,我们称之为「背压」。
注意的是,异步场景指的是被观察者与观察者需要在不同的线程中,并且被观察者生产速度大于观察者消费速度,导致观察者的 Buffer 溢出。
为了更好地理解,举个例子,例如有一个服务器不断地接收来自用户的 HTTP 请求来把用户需要的网页返回给用户。服务器所能承受的同时访问用户数是有上限的。这里,它由服务器主机的处理器和内存情况决定了,它最多只能承受 5000 ~ 6000 个用户同时访问,再多的话服务器就有宕机的风险。那么你决定:把用户数上限设置为 5000,当超出 5000 用户数的时候,再有新的访问就把它丢弃或者拒绝。那么对于这个案例,5000 就是你对于用户访问数设置的 Buffer;第 5001 个用户的访问,就叫做造成了「背压」的产生;而你的「丢弃或拒绝」的行为,就是对于「背压」的处理。(案例摘自:如何形象的描述反应式编程中的背压(Backpressure)机制)