繁体   English   中英

无状态单例和并发

[英]Stateless Singletons and Concurrency

我对无状态单身人士有疑问。 我也有关于带状态的单身人士的问题。

无状态单例服务是帮助实现可伸缩性的好方法。 设计我维护的项目的程序员基本上说不会有并发问题,因为“这只是代码”(Singleton类)。 表示该类没有类级别的变量。 这只是方法。

这是我对C#的了解变得有些朦胧的地方。 是否有2个用户通过单独的Web请求同时命中无状态单例的任何可能的问题? 他们可以同时使用相同的方法吗? 那有可能吗? 如果是这样,这是否意味着它们将在该方法中使用相同的局部变量? 听起来像是一团糟,所以我假设它不可能发生。 我假设方法调用永远不会被其他用户污染。

我已经问过许多同事这个问题,没人知道答案。 因此,这是一个棘手的问题。

我有关单例的问题通常是2个或更多并发用户读取单例的公共属性是否有问题。 我只对阅读感兴趣。 如果属性不在锁块内,是否有可能发生某种并发异常? 还是同时进行的同时读取安全吗? 我真的不想使用lock关键字,因为这是我不需要的性能提升。

谢谢

Singleton是一种反模式 无状态的单身人士更糟。 如果某物不保持状态,则甚至没有最简单的理由将其设为单例。

无状态单例是纯粹的静态函数,来自喜欢添加模式而不考虑模式会实现什么的人。 因为在这种情况下,他会注意到它什么也做不了。

如果看到无状态的单例,则可以安全地删除使之成为单例的所有代码。 static添加到类定义。 做完了 比以前更好。

我认为您对多线程(单例与否)感到困惑。 我建议您阅读一本好书或教程,因为这超出了此处简单答案的范围。 如果您拥有共享资源(简单的示例,不是本地变量),则在多线程环境中需要特别注意。

如果您阅读的时间多于写作,那么使用ReaderWriterLock而不是简单的lock可能会有所帮助。 这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM