@@ -274,19 +274,20 @@ namespace Yitter.IdGenerator | |||||
if (_TurnBackTimeTick < 1) | if (_TurnBackTimeTick < 1) | ||||
{ | { | ||||
_TurnBackTimeTick = _LastTimeTick - 1; | _TurnBackTimeTick = _LastTimeTick - 1; | ||||
_TurnBackIndex++; | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 支持4次回拨次序(避免回拨重叠导致ID重复),可无限次回拨(次序循环使用)。 | |||||
if (_TurnBackIndex > 4) | |||||
{ | |||||
_TurnBackIndex = 1; | |||||
} | |||||
#if DEBUG | #if DEBUG | ||||
BeginTurnBackAction(_TurnBackTimeTick); | BeginTurnBackAction(_TurnBackTimeTick); | ||||
#endif | #endif | ||||
} | } | ||||
_TurnBackIndex++; | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 支持4次回拨次序(避免回拨重叠导致ID重复),可无限次回拨(次序循环使用)。 | |||||
if (_TurnBackIndex > 4) | |||||
{ | |||||
_TurnBackIndex = 1; | |||||
} | |||||
//Thread.Sleep(1); | //Thread.Sleep(1); | ||||
return CalcTurnBackId(_TurnBackTimeTick); | return CalcTurnBackId(_TurnBackTimeTick); | ||||
} | } | ||||
@@ -26,9 +26,9 @@ static int64_t CalcTurnBackId(SnowFlakeWorker *worker); | |||||
static inline void EndOverCostAction(int64_t useTimeTick, SnowFlakeWorker *worker) { | static inline void EndOverCostAction(int64_t useTimeTick, SnowFlakeWorker *worker) { | ||||
if (worker->_TermIndex > 10000) { | |||||
worker->_TermIndex = 0; | |||||
} | |||||
// if (worker->_TermIndex > 10000) { | |||||
// worker->_TermIndex = 0; | |||||
// } | |||||
} | } | ||||
static inline int64_t NextOverCostId(SnowFlakeWorker *worker) { | static inline int64_t NextOverCostId(SnowFlakeWorker *worker) { | ||||
@@ -69,11 +69,12 @@ static inline int64_t NextNormalId(SnowFlakeWorker *worker) { | |||||
if (currentTimeTick < worker->_LastTimeTick) { | if (currentTimeTick < worker->_LastTimeTick) { | ||||
if (worker->_TurnBackTimeTick < 1) { | if (worker->_TurnBackTimeTick < 1) { | ||||
worker->_TurnBackTimeTick = worker->_LastTimeTick - 1; | worker->_TurnBackTimeTick = worker->_LastTimeTick - 1; | ||||
} | |||||
worker->_TurnBackIndex++; | |||||
if (worker->_TurnBackIndex > 4) { | |||||
worker->_TurnBackIndex = 1; | |||||
worker->_TurnBackIndex++; | |||||
// 每毫秒序列数的前 5 位是预留位,0 用于手工新值,1-4 是时间回拨次序 | |||||
// 支持 4 次回拨次序(避免回拨重叠导致 ID 重复),可无限次回拨(次序循环使用)。 | |||||
if (worker->_TurnBackIndex > 4) { | |||||
worker->_TurnBackIndex = 1; | |||||
} | |||||
} | } | ||||
// usleep(1000); // 暂停1ms | // usleep(1000); // 暂停1ms | ||||
@@ -170,16 +170,15 @@ func (m1 *SnowWorkerM1) NextNormalId() int64 { | |||||
if currentTimeTick < m1._LastTimeTick { | if currentTimeTick < m1._LastTimeTick { | ||||
if m1._TurnBackTimeTick < 1 { | if m1._TurnBackTimeTick < 1 { | ||||
m1._TurnBackTimeTick = m1._LastTimeTick - 1 | m1._TurnBackTimeTick = m1._LastTimeTick - 1 | ||||
m1._TurnBackIndex++ | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 支持4次回拨次序(避免回拨重叠导致ID重复),可无限次回拨(次序循环使用)。 | |||||
if m1._TurnBackIndex > 4 { | |||||
m1._TurnBackIndex = 1 | |||||
} | |||||
m1.BeginTurnBackAction(m1._TurnBackTimeTick) | m1.BeginTurnBackAction(m1._TurnBackTimeTick) | ||||
} | } | ||||
m1._TurnBackIndex++ | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 支持4次回拨次序(避免回拨重叠导致ID重复),可无限次回拨(次序循环使用)。 | |||||
if m1._TurnBackIndex > 4 { | |||||
m1._TurnBackIndex = 1 | |||||
} | |||||
// time.Sleep(time.Duration(1) * time.Millisecond) | // time.Sleep(time.Duration(1) * time.Millisecond) | ||||
return m1.CalcTurnBackId(m1._TurnBackTimeTick) | return m1.CalcTurnBackId(m1._TurnBackTimeTick) | ||||
} | } | ||||
@@ -81,9 +81,9 @@ public class SnowWorkerM1 implements ISnowWorker { | |||||
} | } | ||||
private void EndOverCostAction(long useTimeTick) { | private void EndOverCostAction(long useTimeTick) { | ||||
if (_TermIndex > 10000) { | |||||
_TermIndex = 0; | |||||
} | |||||
// if (_TermIndex > 10000) { | |||||
// _TermIndex = 0; | |||||
// } | |||||
} | } | ||||
private void BeginTurnBackAction(long useTimeTick) { | private void BeginTurnBackAction(long useTimeTick) { | ||||
@@ -141,14 +141,13 @@ public class SnowWorkerM1 implements ISnowWorker { | |||||
if (currentTimeTick < _LastTimeTick) { | if (currentTimeTick < _LastTimeTick) { | ||||
if (_TurnBackTimeTick < 1) { | if (_TurnBackTimeTick < 1) { | ||||
_TurnBackTimeTick = _LastTimeTick - 1; | _TurnBackTimeTick = _LastTimeTick - 1; | ||||
BeginTurnBackAction(_TurnBackTimeTick); | |||||
} | |||||
_TurnBackIndex++; | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 支持4次回拨次序(避免回拨重叠导致ID重复),可无限次回拨(次序循环使用)。 | |||||
if (_TurnBackIndex > 4) { | |||||
_TurnBackIndex = 1; | |||||
_TurnBackIndex++; | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 支持4次回拨次序(避免回拨重叠导致ID重复),可无限次回拨(次序循环使用)。 | |||||
if (_TurnBackIndex > 4) { | |||||
_TurnBackIndex = 1; | |||||
} | |||||
//BeginTurnBackAction(_TurnBackTimeTick); | |||||
} | } | ||||
// try { | // try { | ||||
@@ -136,16 +136,15 @@ class Genid { | |||||
if (currentTimeTick < this._LastTimeTick) { | if (currentTimeTick < this._LastTimeTick) { | ||||
if (this._TurnBackTimeTick < 1) { | if (this._TurnBackTimeTick < 1) { | ||||
this._TurnBackTimeTick = this._LastTimeTick - 1; | this._TurnBackTimeTick = this._LastTimeTick - 1; | ||||
this._TurnBackIndex++; | |||||
// 每毫秒序列数的前 5 位是预留位,0 用于手工新值,1-4 是时间回拨次序 | |||||
// 支持 4 次回拨次序(避免回拨重叠导致 ID 重复),可无限次回拨(次序循环使用)。 | |||||
if (this._TurnBackIndex > 4) { | |||||
this._TurnBackIndex = 1; | |||||
} | |||||
this.BeginTurnBackAction(this._TurnBackTimeTick); | this.BeginTurnBackAction(this._TurnBackTimeTick); | ||||
} | } | ||||
this._TurnBackIndex++; | |||||
// 每毫秒序列数的前 5 位是预留位,0 用于手工新值,1-4 是时间回拨次序 | |||||
// 支持 4 次回拨次序(避免回拨重叠导致 ID 重复),可无限次回拨(次序循环使用)。 | |||||
if (this._TurnBackIndex > 4) { | |||||
this._TurnBackIndex = 1; | |||||
} | |||||
return this.CalcTurnBackId(this._TurnBackTimeTick); | return this.CalcTurnBackId(this._TurnBackTimeTick); | ||||
} | } | ||||
@@ -178,14 +178,13 @@ static inline uint64_t NextNormalId(snowflake *flake) | |||||
if (flake->_TurnBackTimeTick < 1) | if (flake->_TurnBackTimeTick < 1) | ||||
{ | { | ||||
flake->_TurnBackTimeTick = flake->_LastTimeTick - 1; | flake->_TurnBackTimeTick = flake->_LastTimeTick - 1; | ||||
flake->_TurnBackIndex++; | |||||
if (flake->_TurnBackIndex > 4) | |||||
{ | |||||
flake->_TurnBackIndex = 1; | |||||
} | |||||
} | } | ||||
flake->_TurnBackIndex++; | |||||
if (flake->_TurnBackIndex > 4) | |||||
{ | |||||
flake->_TurnBackIndex = 1; | |||||
} | |||||
return CalcTurnBackId(flake); | return CalcTurnBackId(flake); | ||||
} | } | ||||
if (flake->_TurnBackTimeTick > 0) | if (flake->_TurnBackTimeTick > 0) | ||||
@@ -86,11 +86,11 @@ class SnowFlakeM1(SnowFlake): | |||||
if current_time_tick < self.__last_time_tick: | if current_time_tick < self.__last_time_tick: | ||||
if self.__turn_back_time_tick < 1: | if self.__turn_back_time_tick < 1: | ||||
self.__turn_back_time_tick = self.__last_time_tick - 1 | self.__turn_back_time_tick = self.__last_time_tick - 1 | ||||
self.__turn_back_index += 1 | |||||
# 每毫秒序列数的前5位是预留位, 0用于手工新值, 1-4是时间回拨次序 | |||||
# 支持4次回拨次序(避免回拨重叠导致ID重复), 可无限次回拨(次序循环使用)。 | |||||
if self.__turn_back_index > 4: | |||||
self.__turn_back_index = 1 | |||||
self.__turn_back_index += 1 | |||||
# 每毫秒序列数的前5位是预留位, 0用于手工新值, 1-4是时间回拨次序 | |||||
# 支持4次回拨次序(避免回拨重叠导致ID重复), 可无限次回拨(次序循环使用)。 | |||||
if self.__turn_back_index > 4: | |||||
self.__turn_back_index = 1 | |||||
return self.__calc_turn_back_id(self.__turn_back_time_tick) | return self.__calc_turn_back_id(self.__turn_back_time_tick) | ||||
@@ -170,9 +170,9 @@ impl SnowWorkerM1 { | |||||
fn BeginOverCostAction(&self, useTimeTick: i64) {} | fn BeginOverCostAction(&self, useTimeTick: i64) {} | ||||
fn EndOverCostAction(&mut self, useTimeTick: i64) { | fn EndOverCostAction(&mut self, useTimeTick: i64) { | ||||
if self._TermIndex > 10000 { | |||||
self._TermIndex = 0; | |||||
} | |||||
// if self._TermIndex > 10000 { | |||||
// self._TermIndex = 0; | |||||
// } | |||||
} | } | ||||
fn BeginTurnBackAction(&self, useTimeTick: i64) {} | fn BeginTurnBackAction(&self, useTimeTick: i64) {} | ||||
@@ -226,16 +226,15 @@ impl SnowWorkerM1 { | |||||
if currentTimeTick < self._LastTimeTick { | if currentTimeTick < self._LastTimeTick { | ||||
if self._TurnBackTimeTick < 1 { | if self._TurnBackTimeTick < 1 { | ||||
self._TurnBackTimeTick = self._LastTimeTick - 1; | self._TurnBackTimeTick = self._LastTimeTick - 1; | ||||
self._TurnBackIndex += 1; | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 支持4次回拨次序(避免回拨重叠导致ID重复),可无限次回拨(次序循环使用)。 | |||||
if self._TurnBackIndex > 4 { | |||||
self._TurnBackIndex = 1; | |||||
} | |||||
self.BeginTurnBackAction(self._TurnBackTimeTick); | self.BeginTurnBackAction(self._TurnBackTimeTick); | ||||
} | } | ||||
self._TurnBackIndex += 1; | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 支持4次回拨次序(避免回拨重叠导致ID重复),可无限次回拨(次序循环使用)。 | |||||
if self._TurnBackIndex > 4 { | |||||
self._TurnBackIndex = 1; | |||||
} | |||||
// thread::sleep(std::time::Duration::from_millis(1)); | // thread::sleep(std::time::Duration::from_millis(1)); | ||||
return self.CalcTurnBackId(self._TurnBackTimeTick); | return self.CalcTurnBackId(self._TurnBackTimeTick); | ||||
} | } | ||||
@@ -243,15 +243,14 @@ export class snowflakeIdv1 { | |||||
if (currentTimeTick < this._LastTimeTick) { | if (currentTimeTick < this._LastTimeTick) { | ||||
if (this._TurnBackTimeTick < 1) { | if (this._TurnBackTimeTick < 1) { | ||||
this._TurnBackTimeTick = this._LastTimeTick - BigInt(1) | this._TurnBackTimeTick = this._LastTimeTick - BigInt(1) | ||||
this._TurnBackIndex++ | |||||
// 每毫秒序列数的前 5 位是预留位,0 用于手工新值,1-4 是时间回拨次序 | |||||
// 支持 4 次回拨次序(避免回拨重叠导致 ID 重复),可无限次回拨(次序循环使用)。 | |||||
if (this._TurnBackIndex > 4) | |||||
this._TurnBackIndex = 1 | |||||
this.BeginTurnBackAction(this._TurnBackTimeTick) | this.BeginTurnBackAction(this._TurnBackTimeTick) | ||||
} | } | ||||
this._TurnBackIndex++ | |||||
// 每毫秒序列数的前 5 位是预留位,0 用于手工新值,1-4 是时间回拨次序 | |||||
// 支持 4 次回拨次序(避免回拨重叠导致 ID 重复),可无限次回拨(次序循环使用)。 | |||||
if (this._TurnBackIndex > 4) | |||||
this._TurnBackIndex = 1 | |||||
return this.CalcTurnBackId(this._TurnBackTimeTick) | return this.CalcTurnBackId(this._TurnBackTimeTick) | ||||
} | } | ||||
@@ -83,9 +83,9 @@ class SnowWorkerM1 : ISnowWorker { | |||||
} | } | ||||
private void EndOverCostAction(long useTimeTick) { | private void EndOverCostAction(long useTimeTick) { | ||||
if (_TermIndex > 10000) { | |||||
_TermIndex = 0; | |||||
} | |||||
//if (_TermIndex > 10000) { | |||||
// _TermIndex = 0; | |||||
//} | |||||
} | } | ||||
private void BeginTurnBackAction(long useTimeTick) { | private void BeginTurnBackAction(long useTimeTick) { | ||||
@@ -143,16 +143,14 @@ class SnowWorkerM1 : ISnowWorker { | |||||
if (currentTimeTick < _LastTimeTick) { | if (currentTimeTick < _LastTimeTick) { | ||||
if (_TurnBackTimeTick < 1) { | if (_TurnBackTimeTick < 1) { | ||||
_TurnBackTimeTick = _LastTimeTick - 1; | _TurnBackTimeTick = _LastTimeTick - 1; | ||||
_TurnBackIndex++; | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 最多4次回拨(防止回拨重叠) | |||||
if (_TurnBackIndex > 4) { | |||||
_TurnBackIndex = 1; | |||||
} | |||||
BeginTurnBackAction(_TurnBackTimeTick); | BeginTurnBackAction(_TurnBackTimeTick); | ||||
} | |||||
_TurnBackIndex++; | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 最多4次回拨(防止回拨重叠) | |||||
if (_TurnBackIndex > 4) { | |||||
_TurnBackIndex = 1; | |||||
} | |||||
} | |||||
// try { | // try { | ||||
// Thread.sleep(1); | // Thread.sleep(1); | ||||
@@ -130,16 +130,15 @@ fn (mut m1 SnowWorkerM1) next_normal_id() u64 { | |||||
if current_time_tick < m1.last_time_tick { | if current_time_tick < m1.last_time_tick { | ||||
if m1.turn_back_timetick < 1 { | if m1.turn_back_timetick < 1 { | ||||
m1.turn_back_timetick = m1.last_time_tick - 1 | m1.turn_back_timetick = m1.last_time_tick - 1 | ||||
m1.turnback_index++ | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 最多4次回拨(防止回拨重叠) | |||||
if m1.turnback_index > 4 { | |||||
m1.turnback_index = 1 | |||||
} | |||||
// m1.begin_turn_back_action(m1.turn_back_timetick) | // m1.begin_turn_back_action(m1.turn_back_timetick) | ||||
} | } | ||||
m1.turnback_index++ | |||||
// 每毫秒序列数的前5位是预留位,0用于手工新值,1-4是时间回拨次序 | |||||
// 最多4次回拨(防止回拨重叠) | |||||
if m1.turnback_index > 4 { | |||||
m1.turnback_index = 1 | |||||
} | |||||
return m1.calc_turn_back_id() | return m1.calc_turn_back_id() | ||||
} | } | ||||
// 时间追平时,turn_back_timetick清零 | // 时间追平时,turn_back_timetick清零 | ||||