IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    指数补偿(Exponential backoff)

    花生发表于 2014-04-21 09:16:26
    love 0

    指数补偿的定义:通过反馈,以指数的速度找到一个合适某个计算过程的因子

    指数补偿指的是,在执行事件时,通过反馈,逐渐降低某个过程的速率,从而最终找到一个合适的速率(来处理事件)。指数补偿通常用于网络和传输协议,比如在进行网络连接时,如果第一次请求失败,那么可以等待 t_1 之后重试,如果再次请求还是失败,那么等待 t_2 之后重试。。。重试可以一直继续下去,或者等待次数或等待时间超过特定值为止。等待的时间 t_n 可以是随机选择,也可以随着重试的次数而逐渐加大,诸如此类。

    维基百科的解释==》Exponential backoff

    在《UNIX 环境高级编程,第二版》(APUE,2E) 16.4 节提供了一个带重试的 socket 连接程序, 如果连接失败, 那么程序就睡眠一段时间再尝试, 每失败一次睡眠的时间就延长一些

    #include "apue.h"
    #include socket.h>
    
    #define MAXSLEEP 128
    
    int
    connect_retry(int sockfd, const struct sockaddr *addr, socklen_t alen)
    {
        int nsec;
    
        for (nsec = 1; nsec < MAXSLEEP; nsec <<=1) {
            if (connect(sockfd, addr, alen) == 0) {
                / connect accepted.
                return 0;
            }
            if (nsec <= MAXSLEEP/2)
                sleep(nsec);
        }
    
        return -1;
    }

    nsec<<=1是指数补偿体现;而if (nsec <= MAXSLEEP/2)则是截断的指数补偿概念



沪ICP备19023445号-2号
友情链接