桶子算法

简介:
1.       什么叫桶子算法?
桶子算法是网络通讯的两端看成是一定时间上的具有长度和宽度的桶子;数据在通讯的两端传输时候数据在不停的过去,这个时间可以看成是长度,及从开始通讯到现在已经经过了多长时间,而宽度当然是网络带宽了;二者的乘积可以看成是具有一定体积的桶子。如下图:
 

2.       用途
桶子算法的目的是为了对发送端的数据流量进行控制。
3.       原理
我们假定这个桶子具有T (ms)长度,带宽为B (kbps),那么这个桶子的体积位:
V=T * B
从某个时间T1开始,有数据不断填充这个桶子,但如果数据填充的不是非常快,或者说数据的流量小于网络带宽B的时候,这个桶子永远都填不满,如下列图表示:
 

如图所示我们这个桶子的体积随着时间在增加,从T1时刻的V1(B*(T1-T0))变化到T2时刻的V2(B*(T2-T0)),桶子的体积增加了B*(T2-T1),如果在这段时间内,实际的数据流量小于这个增量,那么桶子始终有空闲的地方,这样桶子就不会满,实际上在这种情况下桶子算法对流量是控制不了的。
如果在T2-T1时间内,网络的实际数据流量很大,即数据在很短的时间内(小于T2-T1)就将填满了这段容量,那么桶子算法开始发挥流量控制的作用。
在发送数据的时候需要检测桶子的可用大小,如果桶子的可用大小为0表示已经不能再向这个桶子填充任何数据了,必须等待桶子恢复到一定的体积之后才能再接收数据(我们假设为半桶的体积);当桶子恢复的时候我们又可以向这个桶子填充数据了,但如果又很快满了,那么必须又停止下来等待桶子恢复。桶子算法就是通过发发停停来控制流量的。当然如果你将带宽设置的大一些,桶子的体积就大一点,就不那么容易被填满,也能够更快速的发送数据。
 
4.       注意
桶子算法又几点需要注意:
l         桶子的最大容积;这是由时间来决定,我们假定的T,这个值的选择也决定了你可以向桶子发送多大的数据,当然这个时间在不同的网络环境下取值是不同的;在有的网络下,即使你设置的很大,但下面的套接字层已经没有办法发送更快了。
l         恢复算法的采用;一般桶子满了之后需要等待一段时间,如果设置一个时间让网络不至于太闲或造成数据的突然高峰,也不至于让数据不停的跳动,确实很重要。
l      这个流量控制只能对物理带宽以内的流量进行控制。


本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/197371,如需转载请自行联系原作者
 
相关文章
|
4月前
|
算法
算法题(2)
算法题(2)
34 3
|
6月前
|
算法 调度 C#
|
7月前
|
算法
一道算法题
一道算法题
27 0
|
存储 并行计算 算法
FlashAttention算法详解
这篇文章的目的是详细的解释Flash Attention,为什么要解释FlashAttention呢?因为FlashAttention 是一种重新排序注意力计算的算法,它无需任何近似即可加速注意力计算并减少内存占用。所以作为目前LLM的模型加速它是一个非常好的解决方案,本文介绍经典的V1版本,最新的V2做了其他优化我们这里暂时不介绍。因为V1版的FlashAttention号称可以提速5-10倍,所以我们来研究一下它到底是怎么实现的。
598 0
|
算法
转:johnson算法的现实意义
Johnson算法是一种用于解决边数与节点数之间关系为O(n^2)的带权图的最短路径问题的算法。它是一种结合了Dijkstra算法和Bellman-Ford算法的技术,通过使用一个负权重的环检测器来消除负权重的影响。这种算法的时间复杂度为O(n^2+m log n)。
155 1
|
算法 索引
插值查找算法
插值查找算法
|
算法
BWT算法
BWT算法
286 0
BWT算法
|
机器学习/深度学习 算法 搜索推荐
C#算法大全(下)
今天有人想让我搞一期C#算法大全。算法就算法,安排上!
|
算法
超实用的算法小技巧
本篇文章我们将介绍一些超级实用的算法小技巧,灵活使用这些算法小技巧可以帮助我们更好的解决遇到的问题,让我们的时间复杂度,空间复杂度大大降低,有效的提高我们的编程能力。
159 0
|
算法 安全 数据安全/隐私保护
聊聊 A5/1 算法
A5 算法在 1989 年由法国人开发,先后开发了三个版本记作 A5/1、A5/2、A5/3,如果没有特别说明,通常所说的 A5 是指 A5/1,这是一种流密码加密算法。该算法用于 GSM 系统的序列密码算法,最初是保密的,但通过泄漏和逆向工程公开。
聊聊 A5/1 算法