雪花算法(07)雪花算法最终版
雪花算法初步完成后,我们讨论了几个位运算的写法,大家知道雪花算法一旦确定后,很多数字都是定死的,比如机器占多少位,或者时间向左位移多少,这些在算法具体逻辑确定后就不会变了。那么写成最后的数字和用位运算计算出来有什么区别呢?
其实没有区别,我们的程序分为编译期和运行期,我们直接把程序编译好,然后查看class文件,就会发现,两种写法编译结果是一样的。用位运算计算出来只是更加灵活而已,定义很多死的数字也容易写错,后期维护混乱。所以,下面我们来一个最终版,首先看基本的几个常量定义:
文章图片
然后看时间部分的常量:
文章图片
再看机器信息的常量:
文章图片
最后看毫秒内序列的常量定义:
文章图片
上面的常量中,只要修改最开始的四个部分的长度,下面的所有常量都会自动修改。
再来看一下主程序:
文章图片
注意上面判断统一毫秒内序列的变化。其它辅助方法都没有什么变化,不再讨论。现在我们再看看编译完后生成的class文件:
文章图片
可以看到编译后的文件其实就是最终定义了死的常数。包括主程序也是一样:
文章图片
上面就是雪花算法的最终版!!!
最后来测试一下效率,我们来生成300万个id看看花费的时间:
文章图片
【雪花算法(07)雪花算法最终版】
代码地址:https://gitee.com/blueses/snowflake-demo 07
推荐阅读
- 画解算法(1.|画解算法:1. 两数之和)
- Guava|Guava RateLimiter与限流算法
- 错过(一)
- 一个选择排序算法
- SG平滑轨迹算法的原理和实现
- 《算法》-图[有向图]
- LeetCode算法题-11.|LeetCode算法题-11. 盛最多水的容器(Swift)
- 虚拟DOM-Diff算法详解
- 《数据结构与算法之美》——队列
- “三家分晋”最终三国还是归晋,历史上可怕的惊人巧合