成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

億級流量網站架構核心技術:限流詳解之節流

開發 開發工具
有時候我們想在特定時間窗口內對重復的相同事件最多只處理一次,或者想限制多個連續相同事件最小執行時間間隔,那么可使用節流(Throttle)實現,其防止多個相同事件連續重復執行。

上接聊聊高并發系統之限流特技-1聊聊高并發系統之限流特技-2,本篇摘自《億級流量網站架構核心技術》第四章 限流詳解,在之前兩篇文章的基礎上增加了節流部分。

有時候我們想在特定時間窗口內對重復的相同事件最多只處理一次,或者想限制多個連續相同事件最小執行時間間隔,那么可使用節流(Throttle)實現,其防止多個相同事件連續重復執行。節流主要有如下幾種用法:throttleFirst、throttleLast、throttleWithTimeout。

1. throttleFirst/throttleLast

throttleFirst/ throttleLast是指在一個時間窗口內,如果有重復的多個相同事件要處理,則只處理***個或***一個。其相當于一個事件頻率控制器,把一段時間內重復的多個相同事件變為一個,減少事件處理頻率,從而減少無用處理,提升性能。

throttleFirst在一個時間窗口內只會處理該時間窗口內的***個事件

如上圖所示,throttleFirst在一個時間窗口內只會處理該時間窗口內的***個事件。

而throttleLast會處理該時間窗口內的***一個事件。

一個場景是網頁中的resize、scroll和mousemove 事件,當我們改變瀏覽器大小時會觸發resize事件,而滾動頁面元素時會觸發scroll事件。當我們快速連續執行這些操作時會連續觸發這些事件,那么可能因造成UI反應慢、瀏覽器卡頓,因此節流就派上用場了。對于前端開發可以使用jquery-throttle-debounce-plugin實現,而Android開發可以使用RxAndroid實現。

2 throttleWithTimeout

throttleWithTimeout也叫做debounce(去抖),限制兩個連續事件的先后執行時間不得小于某個時間窗口。

throttleWithTimeout限制兩個連續事件的最小間隔時間窗口

如上圖所示,throttleWithTimeout限制兩個連續事件的最小間隔時間窗口。throttleFirst/ throttleLast是基于決定時間做的處理,是以固定時間窗口為基準,對同一個固定時間窗口內的多個連續事件最多只處理一個。而throttleWithTimeout是基于兩個連續事件的相對時間,當兩個連續事件的間隔時間小于最小間隔時間窗口,就會丟棄上一個事件,而如果***一個事件等待了最小間隔時間窗口后還沒有新的事件到來,那么會處理***一個事件。

如搜索關鍵詞自動補全,如果用戶每錄入一個字就發送一次請求,而先輸入的字的自動補全會被很快到來的下一個字符覆蓋,那么會導致先期的自動補全是無用的。throttleWithTimeout就是來解決這個問題的,通過它來減少頻繁的網絡請求,避免每輸入一個字就導致一次請求。

使用RxJava 1.2.0實現的測試代碼。

  1. Observable 
  2.         .create(new Observable.OnSubscribe<Integer>(){ 
  3.             @Override 
  4.             public void call(Subscriber<? super Integer> subscriber) { 
  5.                 //next實現:Thread.sleep(millis); subscriber.onNext(i); 
  6.                 next(subscriber, 1,0);  //0ms 
  7.                 next(subscriber, 2,50); //50ms 
  8.                 next(subscriber, 3,50); //100ms 
  9.                 next(subscriber, 4,30); //130ms 
  10.                 next(subscriber, 5, 40); //170ms 
  11.                 next(subscriber, 6,130); //300ms 
  12.                 subscriber.onCompleted(); 
  13.             } 
  14.         }) 
  15.         .subscribeOn(Schedulers.newThread()) 
  16.         .throttleWithTimeout(100,TimeUnit.MILLISECONDS) 
  17.         .subscribe(new Subscriber<Integer>() { 
  18.             …… 
  19.             @Override 
  20.             public void onNext(Integer i) { 
  21.                 System.out.println("==" + i); 
  22.             } 
  23.         }); 

【本文是51CTO專欄作者張開濤的原創文章,作者微信公眾號:開濤的博客( kaitao-1234567)】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2025-04-22 08:57:27

2016-11-30 13:23:39

京東商品搜索商品搜索引擎

2021-10-12 10:00:25

架構運維技術

2021-12-03 10:47:28

WOT技術峰會技術

2025-02-26 00:28:01

2021-10-14 09:51:17

架構運維技術

2023-06-14 08:49:22

PodKubernetes

2020-01-17 11:00:23

流量系統架構

2017-03-08 10:06:11

Java技術點注解

2016-12-12 09:01:47

Amazon Go核心技術

2022-10-11 08:37:43

Servlet配置版本

2016-11-23 12:55:09

京東活動系統流量

2024-08-23 11:38:05

2021-03-02 07:54:18

流量網關設計

2025-05-12 00:03:15

2022-05-07 14:31:46

物聯網

2024-05-27 08:32:45

2020-09-01 07:49:14

JVM流量系統

2017-04-06 12:43:48

2011-08-23 17:12:22

MySQL支撐百萬級流
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九热在线免费视频 | 亚洲一二三区在线观看 | 91社区在线高清 | 日韩在线 | 国产精品日本一区二区不卡视频 | 欧美中文字幕一区二区三区 | 最新中文字幕第一页视频 | 91高清视频| 国产亚洲一区二区精品 | 国产成人久久久 | 欧美在线一二三 | 亚洲精品久久久久久国产精华液 | 亚洲视频在线免费 | 国产精品中文在线 | 婷婷五月色综合香五月 | 成年人黄色一级片 | 超碰最新在线 | 97影院2 | 一级毛片视频 | 毛片大全| 午夜视频在线免费观看 | 日韩黄 | 黑人中文字幕一区二区三区 | 99热.com| 久久精品视频播放 | 久久精品中文 | 中文字幕中文字幕 | 国产精品黄视频 | www.国产精品| 日韩在线欧美 | 国产精品久久久久久吹潮日韩动画 | 成人免费网站www网站高清 | 九九激情视频 | 逼逼网 | 黄色在线播放视频 | 99精品视频在线观看 | 国产精品久久久久久久久久 | 免费观看黄色片视频 | 99爱视频| 亚洲精品日韩综合观看成人91 | av片网站|