<commit_before>---

layout: post
title: rxjava3——背压
category: 技术
tags: Java
keywords: rxjava

---

## 简介

## 推和拉

观察者模式有推和拉之分。

推模型

	class Subject {
    	private List<Observer> observers = new ArrayList<Observer>();
    	public void notify(){
    		for(Observer observer : observers){
    			observer.update(data);	// data 是Subject 全部或部分信息
    		}
    	}
    }
    
拉模型

	class Subject {
    	private List<Observer> observers = new ArrayList<Observer>();
    	public void notify(){
    		for(Observer observer : observers){
    			observer.update(this); // observer 看情况通过 Subject 引用获取数据
    		}
    	}
    }

简单说，传统观察者模式的推和拉，就是在观察者的方法参数上弄了点花样，驱动执行的是 Subject（调用Observer 的方法）

而很多文章在描述rxjava 响应式编程的时候，通常会说：在RxJava的观察者模型中，被观察者是主动的推送数据给观察者，观察者是被动接收的。而响应式拉取则反过来，观察者主动从被观察者那里去拉取数据，而被观察者变成被动的等待通知再发送数据。[关于RxJava最友好的文章——背压（Backpressure）](https://zhuanlan.zhihu.com/p/24473022) 这句话在下文会有一个很好的注脚。

## 背压的使用方式

[关于RxJava最友好的文章——背压（Backpressure）](https://zhuanlan.zhihu.com/p/24473022)

	Observable observable=Observable.range(1,100000);
	class MySubscriber extends Subscriber<T> {
	    @Override
	    public void onStart() {
	    //一定要在onStart中通知被观察者先发送一个事件
	      request(1);
	    }
	    @Override
	    public void onCompleted() {
	        ...
	    }
	    @Override<commit_msg>[fix]fix code<commit_after>---

layout: post
title: rxjava3——背压
category: 技术
tags: Java
keywords: rxjava

---

## 简介

## 推和拉

观察者模式有推和拉之分。

推模型

	class Subject {
    	private List<Observer> observers = new ArrayList<Observer>();
    	public void notify(){
    		for(Observer observer : observers){
    			observer.update(data);	// data 是Subject 全部或部分信息
    		}
    	}
    }
    
拉模型

	class Subject {
    	private List<Observer> observers = new ArrayList<Observer>();
    	public void notify(){
    		for(Observer observer : observers){
    			observer.update(this); // observer 看情况通过 Subject 引用获取数据
    		}
    	}
    }

简单说，传统观察者模式的推和拉，就是在观察者的方法参数上弄了点花样，驱动执行的是 Subject（调用Observer 的方法）

而很多文章[关于RxJava最友好的文章——背压（Backpressure）](https://zhuanlan.zhihu.com/p/24473022) 在描述rxjava 响应式编程的时候，通常会说：在RxJava的观察者模型中，被观察者是主动的推送数据给观察者，观察者是被动接收的。而响应式拉取则反过来，观察者主动从被观察者那里去拉取数据，而被观察者变成被动的等待通知再发送数据。从这句话看，推和拉的区别 在于 观察者是否可以控制节奏。

## 背压的使用方式

[关于RxJava最友好的文章——背压（Backpressure）](https://zhuanlan.zhihu.com/p/24473022)

	Observable observable=Observable.range(1,100000);
	class MySubscriber extends Subscriber<T> {
	    @Override
	    public void onStart() {
	    //一定要在onStart中通知被观察者先发送一个事件
	      request(1);
	    }
	    @Override
	    public void onCompleted() {
	        ...
	    }
	    @Override
{'fraction_non_alphanumeric': 0.11508248232521602, 'fraction_numerical': 0.019638648860958365, 'mean_word_length': 3.468421052631579, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6950251', 'n_tokens_mistral': 1280, 'n_tokens_neox': 1355, 'n_words': 154}