【发布时间】:2019-09-26 01:47:49
【问题描述】:
假设我们正在实现一个访问某些共享数据的服务,并且无法将这些数据划分为可以独立访问的部分。因此,在任何给定时间,最多只有一个线程可以读取/写入这些数据。
解决这个问题的一个正确但低效的方法是只使用一些同步技术(信号量、监视器等),这样 Netty 工作线程就不会通过同时访问共享数据来破坏共享数据(在服务时)要求)。但是,整个锁定/解锁肯定会大大降低性能。
那么,第一个问题是:
如何将 Netty 配置为具有单个工作线程?
第二个是:
有什么好的设计可以解决共享数据在任何给定时间都不能由超过 1 个线程访问的问题?
1-worker 解决方案似乎解决了这个问题,但我想知道这会如何影响 Netty 的性能,因为可能有数以万计的客户端同时连接,发送请求并等待回复......
【问题讨论】:
-
您可以简单地处理不可变的共享数据:根本不需要锁定以避免损坏,并且每个工作线程都会获得数据的一致副本。
-
问题是我正在处理的数据必须一直更改(实际上如果没有写入,那么我认为无论如何都不需要同步)。跨度>
标签: java thread-safety netty