mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-05-25 07:40:51 +00:00
perf[net]: 优化同步或异步的调用控制器
This commit is contained in:
@@ -51,12 +51,14 @@ public class PacketSignal {
|
||||
}
|
||||
|
||||
public static SignalPacketAttachment removeSignalAttachment(SignalPacketAttachment packetAttachment) {
|
||||
var packetId = packetAttachment.getPacketId();
|
||||
return removeSignalAttachment(packetAttachment.getPacketId());
|
||||
}
|
||||
|
||||
public static SignalPacketAttachment removeSignalAttachment(int packetId) {
|
||||
var hash = packetId & SIGNAL_MASK;
|
||||
|
||||
var attachment = signalPacketArray.get(hash);
|
||||
if (attachment != null && attachment.getPacketId() == packetId) {
|
||||
signalPacketArray.lazySet(hash, null);
|
||||
if (attachment != null && attachment.getPacketId() == packetId && signalPacketArray.compareAndSet(hash, attachment, null)) {
|
||||
return attachment;
|
||||
}
|
||||
return signalPacketAttachmentMap.remove(packetId);
|
||||
|
||||
@@ -16,7 +16,6 @@ import com.zfoo.event.manager.EventBus;
|
||||
import com.zfoo.net.dispatcher.manager.PacketSignal;
|
||||
import com.zfoo.net.packet.model.SignalPacketAttachment;
|
||||
import com.zfoo.scheduler.util.TimeUtils;
|
||||
import com.zfoo.util.ThreadUtils;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -50,15 +49,6 @@ public class PacketSignalTest {
|
||||
});
|
||||
}
|
||||
|
||||
for (int i = 0; i < 100; i++) {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
addAndRemoveWithSleep();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
countDownLatch.await();
|
||||
|
||||
System.out.println(TimeUtils.currentTimeMillis() - startTime);
|
||||
@@ -66,24 +56,22 @@ public class PacketSignalTest {
|
||||
}
|
||||
|
||||
public void addAndRemove() {
|
||||
for (int i = 0; i < 1_0000_0000; i++) {
|
||||
var id = atomicInteger.incrementAndGet();
|
||||
var attachment = new SignalPacketAttachment();
|
||||
attachment.setPacketId(id);
|
||||
PacketSignal.addSignalAttachment(attachment);
|
||||
PacketSignal.removeSignalAttachment(attachment);
|
||||
for (int count = 0; count < 1_0000; count++) {
|
||||
var startIndex = atomicInteger.incrementAndGet();
|
||||
var endIndex = 0;
|
||||
for (int i = 0; i < 1000; i++) {
|
||||
endIndex = atomicInteger.incrementAndGet();
|
||||
}
|
||||
for (int i = startIndex; i < endIndex; i++) {
|
||||
var attachment = new SignalPacketAttachment();
|
||||
attachment.setPacketId(i);
|
||||
PacketSignal.addSignalAttachment(attachment);
|
||||
}
|
||||
for (int i = startIndex; i < endIndex; i++) {
|
||||
PacketSignal.removeSignalAttachment(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addAndRemoveWithSleep() {
|
||||
for (int i = 0; i < 1000_0000; i++) {
|
||||
var id = atomicInteger.incrementAndGet();
|
||||
var attachment = new SignalPacketAttachment();
|
||||
attachment.setPacketId(id);
|
||||
PacketSignal.addSignalAttachment(attachment);
|
||||
ThreadUtils.sleep(3000);
|
||||
PacketSignal.removeSignalAttachment(attachment);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user