优化数字上标显示
Swenson1992
3年前
修改理由:
此投稿已在 3年前 合并。
内容修改:
Old | New | Differences |
---|---|---|
7 | 7 | - `1位`,不用。二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所以这个最高位固定是0 |
8 | 8 | - `41位`,用来记录时间戳(毫秒)。 |
9 | 9 | |
10 | > 41位可以表示241−1个数字, | |
11 | > | |
12 | > - 如果只用来表示正整数(计算机中正数包含0),可以表示的数值范围是:0 至 241−1,减1是因为可表示的数值范围是从0开始算的,而不是1。\ | |
13 | > 也就是说41位可以表示241−1个毫秒的值,转化成单位年则是(241−1)/(1000∗60∗60∗24∗365)=69年 | |
10 | > 41位可以表示$$2^{41}$$−1个数字, | |
11 | > 如果只用来表示正整数(计算机中正数包含0),可以表示的数值范围是:0 至 $$2^{41}$$−1,减1是因为可表示的数值范围是从0开始算的,而不是1。 | |
12 | > 也就是说41位可以表示241−1个毫秒的值,转化成单位年则是($$2^{41}$$−1)/(1000∗60∗60∗24∗365)=69年 | |
14 | 13 | |
15 | 14 | `10位`,用来记录工作机器id。 |
16 | 15 | |
17 | > 可以部署在 | |
18 | > 5位(bit)可以表示的最大正整数是 | |
16 | > 可以部署在$$2^{10}$$=1024个节点,包括5位datacenterId和5位workerId\ | |
17 | > 5位(bit)可以表示的最大正整数是$$2^5$$−1=31,即可以用0、1、2、3、....31这32个数字,来表示不同的datecenterId或workerId | |
19 | 18 | |
20 | 19 | `12位`,序列号,用来记录同毫秒内产生的不同id。 |
21 | 20 | |
22 | > 12位(bit)可以表示的最大正整数是 | |
21 | > 12位(bit)可以表示的最大正整数是 $$2^{12}$$−1=4095,即可以用0、1、2、3、....4094这4095个数字,来表示同一机器同一时间截(毫秒)内产生的4095个ID序号 | |
23 | 22 | |
24 | 23 | ``` |
25 | 24 | // Fetch prints the content found at a URL. | … | … |
48 | 47 | ) |
49 | 48 | |
50 | 49 | type worker struct { |
51 | mu | |
52 | laststamp | |
53 | workerid | |
50 | mu sync.Mutex | |
51 | laststamp int64 | |
52 | workerid int64 | |
54 | 53 | datacenterid int64 |
55 | sequence | |
54 | sequence int64 | |
56 | 55 | } |
57 | 56 | |
58 | 57 | func(w *worker) getCurrentTime() int64 { |