雪花算法初步完成后,我們討論了幾個位運(yùn)算的寫法峻堰,大家知道雪花算法一旦確定后讹开,很多數(shù)字都是定死的,比如機(jī)器占多少位茧妒,或者時間向左位移多少萧吠,這些在算法具體邏輯確定后就不會變了。那么寫成最后的數(shù)字和用位運(yùn)算計算出來有什么區(qū)別呢桐筏?
其實沒有區(qū)別纸型,我們的程序分為編譯期和運(yùn)行期,我們直接把程序編譯好,然后查看class文件狰腌,就會發(fā)現(xiàn)除破,兩種寫法編譯結(jié)果是一樣的。用位運(yùn)算計算出來只是更加靈活而已琼腔,定義很多死的數(shù)字也容易寫錯瑰枫,后期維護(hù)混亂。所以丹莲,下面我們來一個最終版光坝,首先看基本的幾個常量定義:
然后看時間部分的常量:
再看機(jī)器信息的常量:
最后看毫秒內(nèi)序列的常量定義:
上面的常量中,只要修改最開始的四個部分的長度甥材,下面的所有常量都會自動修改盯另。
再來看一下主程序:
注意上面判斷統(tǒng)一毫秒內(nèi)序列的變化。其它輔助方法都沒有什么變化洲赵,不再討論≡Ч撸現(xiàn)在我們再看看編譯完后生成的class文件:
可以看到編譯后的文件其實就是最終定義了死的常數(shù)。包括主程序也是一樣:
上面就是雪花算法的最終版5肌Vシⅰ!
最后來測試一下效率苛谷,我們來生成300萬個id看看花費的時間: