gpt4 book ai didi

java - 为 Netty 服务器实现同步块(synchronized block)的权利吗?

转载 作者:行者123 更新时间:2023-12-01 11:32:59 25 4
gpt4 key购买 nike

我一直在使用 Netty 构建一个游戏服务器,它可能有数千个并发连接。我知道在服务器端,这些连接可能共享一些但不仅仅是一个工作线程,因此让它们访问自由共享的数据是不安全的,例如查找、删除某些对象或将某些对象添加到某些常见列表和 map 中。我正在考虑将同步块(synchronized block)添加到访问共享数据的所有代码中。 (对于查询数据库等繁重任务,我计划使用 ExecutorService/Threads,因此同步对于这些任务来说不会成为大问题)。

我仍然很困惑它是否是一个好的/通用的解决方案,或者是否有更好的方法(比使用同步块(synchronized block))来为 Netty 服务器做到这一点。

请有人给我一些建议。非常感谢。

最佳答案

同步块(synchronized block)(或其等效的 ReentrantLock)是访问共享数据的唯一可靠方法。然而,在像 Netty 这样的异步环境中,同步块(synchronized block)内的代码可能不会调用 wait(),因为这会将当前线程排除在服务之外。通常synchronized block 是生产者-消费者通信中的中间对象,当生产者没有数据时,消费者调用wait()。为了避免阻塞,消费者在数据没有准备好时,将自己(或另一个Runnable类型的对象)放入中间对象中,而生产者在发送数据时,将该Runnable提交到线程池(而不是调用notify()) .

同步块(synchronized block)是低级设施,不应与业务逻辑混合。相反,应该开发一个具有足够接口(interface)的通信框架。这种框架的一个例子是我的 df4j图书馆。

关于java - 为 Netty 服务器实现同步块(synchronized block)的权利吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30270761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com