ASP.NET开发人员真的需要关心线程安全吗?

Kur*_*ler 19 asp.net multithreading thread-safety

我认为自己了解线程的概念以及为什么某些代码是"线程安全的",但是作为主要使用ASP.NET的人,线程和线程安全是我很少想到的.但是,我似乎在Stack Overflow上遇到了许多评论和答案(不一定是针对ASP.NET)的" 警告 - 这不是线程安全的!,"它往往让我猜测我是否编写了类似的代码,这些代码实际上可能会导致我的应用程序出现问题.[震惊,恐怖等]所以我不得不问:

ASP.NET开发人员真的需要关心线程安全吗?

我的看法:虽然Web应用程序本质上是多线程的,但每个特定请求都在一个线程上,而您创建,修改或销毁的所有非静态类型都是该单个线程/请求所独有的.如果请求创建这将创建一个业务对象实例的DAL对象的实例,我想偷懒初始化此对象中的集合,它并不重要,如果它不是线程安全的,因为它永远不会被感动另一个线程....对?(假设我没有在请求期间启动一个新线程来启动长时间运行的异步进程.我很清楚这会改变一切.)

当然,静态类,方法和变量恰恰相反.每个请求都会共享它们,并且开发人员必须非常小心,不要使用"不安全"的代码,这些代码在由一个用户执行时会对所有其他用户产生意想不到的影响.

但这就是它,因此ASP.NET中的线程安全性大部分归结为:小心你如何设计和使用静态.除此之外,你根本不需要担心它.

我错了吗?你不同意吗?开导我!

Joe*_*orn 8

除了静态项之外,还有某些对象在应用程序的所有请求之间共享.例如,小心将项目放在应用程序缓存中是非线程安全的.此外,没有什么可以阻止您在处理请求时生成自己的线程进行后台处理.


Bob*_*Bob 5

有不同级别的 ASP.NET 开发人员。您可以在不了解任何线程、互斥锁、锁、信号量甚至设计模式的情况下成为 ASP.NET 开发人员的完美职业,因为大部分 ASP.NET 应用程序基本上都是 CRUD 应用程序,几乎没有额外的业务逻辑。

然而,我遇到的大多数伟大的 ASP.NET 开发人员不仅仅是 ASP.NET 开发人员,他们的技能涵盖了整个领域,因此他们对线程和其他好东西了如指掌,因为他们不局限于 ASP.NET。

所以不,在大多数情况下 ASP.NET 开发人员不需要了解线程安全。但是只知道最低限度有什么乐趣呢?