baidu / uid-generator

UniqueID generator
Apache License 2.0
5.43k stars 1.55k forks source link

AtomicLong.updateAndGet()超级费CPU,并发一多就100% #86

Open yangxuanjia opened 1 year ago

yangxuanjia commented 1 year ago

Screenshot from 2023-03-03 15-26-20 Screenshot from 2023-03-03 15-27-17

原来:

// spin get next available cursor
long currentCursor = cursor.get();
long nextCursor = cursor.updateAndGet(old -> old == tail.get() ? old : old + 1);

// trigger padding in an async-mode if reach the threshold
long currentTail = tail.get();

改成下面这样是否可以???

// spin get next available cursor
long currentCursor = cursor.get();
long currentTail = tail.get();

long nextCursor = currentCursor;
if (currentCursor != currentTail) {
    nextCursor = cursor.incrementAndGet();
}
zxy1994 commented 1 year ago

Screenshot from 2023-03-03 15-26-20 Screenshot from 2023-03-03 15-27-17

原来:

// spin get next available cursor
long currentCursor = cursor.get();
long nextCursor = cursor.updateAndGet(old -> old == tail.get() ? old : old + 1);

// trigger padding in an async-mode if reach the threshold
long currentTail = tail.get();

改成下面这样是否可以???

// spin get next available cursor
long currentCursor = cursor.get();
long currentTail = tail.get();

long nextCursor = currentCursor;
if (currentCursor != currentTail) {
    nextCursor = cursor.incrementAndGet();
}

您好,请问下你这个是什么工具?看起来很直观,谢谢大佬