kyn*_*igs 9 asp.net multithreading locking
几个月前,我正在面试我目前所在公司的工作,我没有强大的网络开发背景,但他向我提出的一个问题是你如何改进这段代码.
我完全不记得代码块,但总结一下,它是一个网络点击计数器,他使用锁定在hitcounter上.
lock(HitCounter)
{
// Bla...
}
Run Code Online (Sandbox Code Playgroud)
然而经过一些讨论他说,锁是好的,但从未在Web应用程序中使用它!
他的陈述背后的基础是什么?为什么我不能在Web应用程序中使用锁?
没有特殊原因可以在Web应用程序中使用锁.但是,它们应该被仔细使用,因为它们是一种序列化多线程访问的机制,如果锁定块被争用,这可能导致阻塞.这不仅仅是Web应用程序的一个问题.
值得记住的是,在现代硬件上,无意识锁定需要20纳秒才能翻转.考虑到这一点,应该遵循尝试尽可能减少锁定块内部代码的通常做法.如果块中的代码最少,则开销很小,并且争用的可能性很低.
说永远不应该使用锁是一种真正的一揽子陈述.这实际上取决于您的要求是什么,例如,在请求之间共享的线程安全的内存高速缓存可能导致比从数据库按需提取更少的请求阻止.
最后,BCL和ASP.Net Framework类型肯定会在内部使用锁,因此无论如何都要间接使用它们.
应用程序域可能会被回收.
这可能会导致旧的appdomain仍在完成服务某些请求,而新的appdomain也会提供新的请求.
静态变量不会在它们之间共享,因此在这种情况下,锁定静态全局不会授予排他性.
归档时间: |
|
查看次数: |
6652 次 |
最近记录: |