.net mvc中session的锁机制

今天遇到个奇怪的问题, 一个秒杀商品系统, 大量秒杀请求进来, 到了action竟然是单线程执行! 这样产生的效果就是“这个系统好慢啊!!”。数据库

但是我没有加lock,为何会变成单线程执行呢?session

 

找资料才知道, session有个锁机制。性能

资料内容:测试

和数据库的锁同样, 分共享锁和排它锁。spa

共享锁占用时,排它锁必须等待,而另外一个共享锁能够同事访问;线程

排它锁占用时,其余全部锁都必须等待。事务

两个锁的持续时间都是整个action走完才释放。相似于Repeatable以上的事务隔离级别。io

 


而个人实际测试结果是:table

不管是读仍是写,都是排它锁占用!请求

也就是说,只要用到session,哪怕在BaseController里仅仅读取, 最终action也是线性执行的。

所以session是性能杀手。

相关文章
相关标签/搜索