距离YouTube被Google收购已经过去了十年,谁能想到当时被亿万富翁马克·库班称为“只有白痴才买的”YouTube如今已经成为世界上最大的视频分享网站了!
在YouTube开发之初,没人能想到它上面的视频会超过两亿次观看,更不用说会达到2,147,483,647次观看,这是32位有符号整数的最大值,一个很庞大的数字。
然鹅,2012年,韩国流行歌星Psy的热门歌曲“江南Style”一上线便引爆了全场!
随着点击量的暴增,很快便达到了网站点击量所设置的“32位有符号整数的最大值”,讲道理接下来我们应该看到这样的图:
却,没想到会出现下面这张图。。。
负值?
这是因为计数器采用的是环绕式处理技术——“ wrap around ”(以二进制补码的方式计算)。
什么意思呢?让我们先来讲讲计数器。
电脑上计数器的大小一般是字节(Byte)的倍数,一个字节有8位。假如我们拿一个字节来计数,相当于拥有了一个八位计数器,这个计数器计数的极限是——11111111,一旦超过,就会产生数据溢出。
那为什么会存在负数呢?这是因为我们对于带符号的整数的定义是:1 是最高位代表这个数是负的,0是最高位代表这个数是正的。01111111 再加 1 就是 10000000,为了便于计算,我们把这值定义为最小值,也就是-128。于是这个带正负的 1 字节八位计数器能记录的值为 -128 到 127。
如果想要记录128怎么办呢,这时我们就需要换一个更多位的计数器。
Google采用的32 位计数器是4 字节的,能记录的最大值是
01111111111111111111111111111111(换算成十进制是2,147,483,647),所以当“江南style”点击量超过这个极限时出现的负值就是-2,147,483,648。
Soga,现在你应该知道了,YouTube 给视频做计数的计数器是一个带正负的 4 字节三十二位计数器。
同理,为了修复这个bug,Google将点击量的限制设置为64位有符号整数最大值。Google的工程师指出,对于点击量极限的设置就像将分配给该数据点的内存空间从32位改为64位一样简单,这实际上是一个比较小的修改。并没有破坏YouTube的代码,更不会对互联网造成什么破坏。
这下我们可以不用担心YouTube点击数字再出现负值bug了,只需要默默地等着接下来的9,223,372,036,854,775,807 + 1次观看了。
当然,关于YouTube这个bug的解释也存在一些争论,实际情况到底是不是这样呢,又或者Google早已预料到并提前更改了点击量计数器限制呢?很有可能是后者,从Google发布的声明来看,这或许是跟大家开的小玩笑。
不过,“江南style”视频的存在也确实在YouTube占据了相当厉害的地位。不给鸟叔一笔bug测试费也可以颁个XX最火爆视频奖了。
“江南Style”在YouTube视图中占据主导地位
参考文章:
https://www.quora.com/What-are-some-famous-bugs-in-the-computer-science-world
http://www.exploringbinary.com/gangnam-style-video-overflows-youtube-counter/
https://www.wired.com/2014/12/gangnam-style-youtube-math/
http://arstechnica.com/business/2014/12/gangnam-style-overflows-int_max-forces-youtube-to-go-64-bit/
继续阅读
阅读原文