throttle 技术其实并不提升性能,这个技术主要是防止系统被超过自己不能处理的流量给搞垮了,这其实是个保护机制。使用throttle技术一般来说是对于一些自己无法控制的系统,只要是异步,一般都会有throttle机制。
比如:
在android系统中大量是使用ContentObserver(ContentObserver用于监听数据变化),一般情况会在ContentObserver中的onChange方法作相关查询工作,也就说会生成游标。当某时瞬间游标生成过多(数据库查询极端频繁,但属于正常的插入,而且不能用批量插入),会导致内存不够而被系统自动终止该程序。这时我们就可以使用throttle技术。
代码如下:
public class Throttle {
public static final boolean DEBUG = false; // Don't submit with true
public static final int DEFAULT_MIN_TIMEOUT = 150;
public static final int DEFAULT_MAX_TIMEOUT = 2500;
/* package */ static final int TIMEOUT_EXTEND_INTERVAL = 500;
private static Timer TIMER = new Timer();
private final Clock mClock;
private final Timer mTimer;
/** Name of the instance. Only for logging. */
private final String mName;
/** Handler for UI thread. */
private final Handler mHandler;
/** Callback to be called */
private final Runnable mCallback;
/** Minimum (default) timeout, in milliseconds. */
private final int mMinTimeout;
/** Max timeout, in milliseconds. */
private final int mMaxTimeout;
/** Current timeout, in milliseconds. */
private int mTimeout;
/** When {@link #onEvent()} was last called. */
private long mLastEventTime;
private MyTimerTask mRunningTimerTask;
/** Constructor with default timeout */
public Throttle(String name, Runnable callback, Handler handler) {
this(name, callback, handler, DEFAULT_MIN_TIMEOUT, DEFAULT_MAX_TIMEOUT);
}
/** Constructor that takes custom timeout */
public Throttle(String name, Runnable callback, Handler handler,int minTimeout,
int maxTimeout) {
this(name, callback, handler, minTimeout, maxTimeout, Clock.INSTANCE, TIMER);
}
/** Constructor for tests */
/* package */ Throttle(String name, Runnable callback, Handler handler,int minTimeout,
int maxTimeout, Clock clock, Timer timer) {
if (maxTimeout < minTimeout) {
throw new IllegalArgumentException();
}
mName = name;
mCallback = callback;
mClock = clock;
mTimer = timer;
mHandler = handler;
mMinTimeout = minTimeout;
mMaxTimeout = maxTimeout;
mTimeout = mMinTimeout;
}
private void debugLog(String message) {
Log.d(Logging.LOG_TAG, "Throttle: [" + mName + "] " + message);
}
private boolean isCallbackScheduled() {
return mRunningTimerTask != null;
}
public void cancelScheduledCallback() {
if (mRunningTimerTask != null) {
if (DEBUG) debugLog("Canceling scheduled callback");
mRunningTimerTask.cancel();
mRunningTimerTask = null;
}
}
/* package */ void updateTimeout() {
final long now = mClock.getTime();
if ((now - mLastEventTime) <= TIMEOUT_EXTEND_INTERVAL) {
mTimeout *= 2;
if (mTimeout >= mMaxTimeout) {
mTimeout = mMaxTimeout;
}
if (DEBUG) debugLog("Timeout extended " + mTimeout);
} else {
mTimeout = mMinTimeout;
if (DEBUG) debugLog("Timeout reset to " + mTimeout);
}
mLastEventTime = now;
}
public void onEvent() {
if (DEBUG) debugLog("onEvent");
updateTimeout();
if (isCallbackScheduled()) {
if (DEBUG) debugLog(" callback already scheduled");
} else {
if (DEBUG) debugLog(" scheduling callback");
mRunningTimerTask = new MyTimerTask();
mTimer.schedule(mRunningTimerTask, mTimeout);
}
}
/**
* Timer task called on timeout,
*/
private class MyTimerTask extends TimerTask {
private boolean mCanceled;
@Override
public void run() {
mHandler.post(new HandlerRunnable());
}
@Override
public boolean cancel() {
mCanceled = true;
return super.cancel();
}
private class HandlerRunnable implements Runnable {
@Override
public void run() {
mRunningTimerTask = null;
if (!mCanceled) { // This check has to be done on the UI thread.
if (DEBUG) debugLog("Kicking callback");
mCallback.run();
}
}
}
}
/* package */ int getTimeoutForTest() {
return mTimeout;
}
/* package */ long getLastEventTimeForTest() {
return mLastEventTime;
}
}
分享到:
相关推荐
在实际应用中,节流阀和Check 阀经常被组合使用,以实现更好的流量控制和系统安全。例如,在hydraulic系统中,节流阀可以用于控制液体流量,而Check 阀可以用于防止液体回流。 四、节流阀和Check 阀的技术参数 ...
ThrottleStop的主要功能是控制CPU的节流行为,它能够禁用Intel的SpeedStep技术,防止CPU在负载较低时自动降低频率以节省电力。通过手动调整设置,你可以使CPU保持在更高的运行速度,提升整体性能。 二、安装与启动 ...
Laravel开发-throttle 访问节流控制工具 访问流量控制工具
Throttle中文直译为“节流”,在编程中指的是一种减少资源消耗的技术,具体到Lodash中,throttle函数用于限制函数的执行频率,即在一个时间窗口内,无论调用多少次该函数,它只会执行一次。 #### 在Vue中使用Lodash...
下面将详细介绍ThrottleStop的主要功能和使用方法。 1. **核心功能**: - **频率调整**:ThrottleStop允许用户自定义CPU的核心时钟速度,以提高或降低处理器的运行速度。这对于进行高性能计算或者需要快速响应的...
诺言节气门节流诺言一次要n并发诺言。用法 // run 10 promises at a timevar throttle = require ( 'promise-throttle' ) ( 10 ) ;var request = require ( 'request' ) ;var urls = [ ... ] ;var promises = urls ....
现代处理器为了节能和延长电池寿命,会采用一种名为“节流”(Throttling)的技术,当CPU负载降低时,会自动降低其运行速度。然而,对于需要高性能的用户,如游戏爱好者或专业工作者,这种节流可能会导致性能下降,...
今天小编要给大家介绍一款专业好用的网络加速软件...采用加速原理是安全有效地更改你的电脑和调制解调器与节流阀,让网速更快而不损坏系统; 下载方便,使用简单; 提供更快的实时网速。 Throttle(网络加速软件)截图
2. The ThrottleStop Guide (2019) Ultrabook Review.url:这是一个链接文件,指向2019年关于ThrottleStop的使用指南,可能包含详细的操作步骤和优化建议,适合初次使用的用户参考。 3. logo.png:这应该是Throttle...
ThrottleStop是一款强大的工具,其主要功能是禁用Intel的节电技术,例如SpeedStep,这是一种动态调整CPU电压和频率的技术,旨在节省电源并降低温度。在某些情况下,例如需要高性能运行时,SpeedStep可能会限制处理器...
从派生节流Dart库包含“节流”和“反跳”类使用请参阅上的使用演示。节流的例子final Throttling thr = new Throttling (duration : Duration (seconds : 2 ));thr. throttle (() { print ( ' *ping #1' );});await ...
2. **禁用节流技术**:ThrottleStop可以禁用多种CPU节流技术,如Turbo Boost限制、EIST(增强型Intel SpeedStep)等,消除因节流导致的性能下降。 3. **温度监控**:软件内置了实时的CPU温度监测功能,帮助用户了解...
ThrottleStop的核心功能是禁用Intel处理器上的节电技术,如SpeedStep、C1E和Turbo Boost等。这些技术通常会根据系统的负载自动调整CPU的频率和电压,以节省电力或防止过热。然而,在某些情况下,例如进行高强度计算...
使用ThrottleStop时,用户需谨慎操作,因为不适当的设置可能导致过热、硬件损坏,甚至影响系统的稳定性和寿命。对于那些熟悉硬件和软件的高级用户来说,ThrottleStop是提升电脑性能的强大工具,而对于普通用户,建议...
ThrottleStop的工作机制基于CPU的节流技术,这是一项由制造商设计用于节能和防止过热的机制。当CPU负载较轻或温度过高时,它会自动降低时钟速度,也就是所谓的“节流”。然而,对于一些需要高性能的场景,如游戏、...
6. **各种节流技术的禁用**:如SpeedStep、EIST(Enhanced Intel SpeedStep Technology)、C-states(低功耗状态)等,这些技术在默认情况下会降低CPU速度以节省电力。 通过ThrottleStop,用户可以根据自己的需求和...
ThrottleStop的主要功能集中在调整CPU的各种频率限制上,例如BCLK(基础时钟频率)和倍频,以及Turbo Boost(动态加速技术)设置。通过这些调整,用户可以在游戏、多任务处理或高强度计算时获得更高的性能,而在日常...
ThrottleStop 免费版,尽情使用,永不过期!ThrottleStop 让电脑为性能发烧锁定主频,气绝降频,更可以调节至尊系列处理器的倍频、电压、外频,ThrottleStop 在手,强悍恒持久!