doc[net]: 更新文档

This commit is contained in:
jaysunxiao
2021-10-28 18:57:38 +08:00
parent d412dd783f
commit 65e1fdc416
@@ -61,6 +61,24 @@ public final class TaskBus {
}
/**
* Actor模型,最主要的就是线程模型,Actor模型保证了某个Actor所代表的任务永远不会同时在两条线程同时处理任务,这就就避免了并发。
* 无论是JavaKotlin,Scala都没有真正的协程,所以最终做到Actor模型的只能是细致的控制线程。
* <p>
* zfoo中通过对线程池的细粒度控制,从而实现了Actor模型。
* 为了简单,可以把Actor可以理解为一个用户或者一个玩家。
* 因为同一个用户或者玩家的uid是固定的,通过uid去计算一致性hashexecutorConsistentHash)永远会得到一致的结果,
* 从而保证同一个用户或者玩家的请求总能通过executorConsistentHash被路由到同一台服务器的同一个线程去执行,从而避免了并发,实现了无锁化。
* <p>
* zfoo所代表的Actor模型,是更加精简的Actor模型,让上层调用无感知,在zfoo中可以简单的理解 actor = executorConsistentHash。
* <p>
* 在zfoo这套线程模型中,保证了服务器所接收到的Packet(最终被包装成PacketReceiverTask任务),永远只会在同一条线程处理,
* TaskBus通过AbstractTaskDispatch去派发PacketReceiverTask任务,具体在哪个线程处理通过IAttachment的executorConsistentHash计算。
* <p>
* IAttachment的不同,executorConsistentHash也不同:
* GatewayAttachment:默认是executorConsistentHash等于用户活玩家的uid,也可以通过IGatewayLoadBalancer接口指定
* SignalAttachmentexecutorConsistentHash通过IRouter和IConsumer的argument参数指定
*/
public static void submit(PacketReceiverTask task) {
taskDispatch.getExecutor(task).execute(task);
}