.net mvc中session的锁机制

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

可是我没有加lock,为什么会变成单线程执行呢?

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

资料内容:

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

共享锁占用时,排它锁必须等待,而另一个共享锁可以同事访问;

排它锁占用时,其他所有锁都必须等待。

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


而我的实际测试结果是:

无论是读还是写,都是排它锁占用!

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

因此session是性能杀手。

原文地址:https://www.cnblogs.com/dengshaojun/p/9942929.html

时间: 2024-10-03 14:55:33

.net mvc中session的锁机制的相关文章

php中session的生成机制、回收机制和存储机制探究

1.php中session的生成机制 我们先来分析一下PHP中是怎么生成一个session的.设计出session的目的是保持每一个用户的各种状态来弥补HTTP协议的不足(无状态).我们现在有一个疑问,我们都知道session是保存在服务器的,既然它用于保持每一个用户的状态那它利用什么来区别用户的呢?这个时候就得借助cookie了.当我们在代码中调用session_start();时,PHP会同时往SESSION的存放目录(默认为/tmp/)和客户端的cookie目录各生成一个文件.sessio

Spring MVC中Session的正确用法<转>

Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的设计模式遍及各处,使得其框架虽然学习曲线陡峭,但 一旦掌握则欲罢不能.初学者并不需要过多了解框架的实现原理,随便搜一下如何使用“基于注解的controller”就能很快上手,而一些书籍诸如 “spring in action”也给上手提供了非常优良的选择. 网上的帖子多如牛毛,中文的快速上手,英文的

mvc中session的几点注意事项

session在controller中传递出现空值 session在controller传值到view也是空值 session时默认引用的是System.Web.Mvc.Controll.session,可能这个session不能传递, 所以解决方法就是详细定义session,我们可以定义System.Web.HttpContext.Current.Session可以解决这个问题

Linux 2.6内核中新的锁机制--RCU

转自:http://www.ibm.com/developerworks/cn/linux/l-rcu/ 一. 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用.但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差距越来越大,而这种锁使用了原子操作指令,它需要原子地访问内存,

php中session入库(mysql)机制

seesion的入库(mysql)操作,主要是修改seesion的读取与写入操作 主要是通过 bool session_set_save_handler(seesion_open,seesion_close,session_read,session_write,session_destory,session_gc); 依次对应的是开启seesion连接方式,关闭session,读取session,写拉seesion,销毁session,seesion的垃圾加收机制. 基本实例项目 1 <?php

java中常用的锁机制

基础知识 基础知识之一:锁的类型 锁就那么几个,只是根据特性,分为不同的类型 锁的概念 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制.锁旨在强制实施互斥排他.并发控制策略. 锁通常需要硬件支持才能有效实施.这种支持通常采取一个或多个原子指令的形式,如"test-and-set", "fetch-and-add" or "compare-and-swap"".这些指令允

MVC中Session的使用和传递

1.登录时在controller中记录session,代码如下: public ActionResult Login(UserLoginViewModel uViewModel) { if (ModelState.IsValid) { var user = db.ADUsers.SingleOrDefault(t => t.usrName == uViewModel.usrName && t.usrPassword == uViewModel.usrPassword); if (us

转:django中session的实现机制

转:www.jianshu.com 要理解session,首先要搞清楚cookie的概念.由于http是无状态的,服务器不能记住用户的信息状态,因此若由同一个客户端发起的多条请求,服务器不能辨别这些请求来自哪个用户.http无状态的限制为web应用程序的设计带来了许多不便,购物网站中的"购物车"功能就是一个很好的例子,当用户把商品放进购物车后,客户端必须要保存购物车的状态,否则当用户下次浏览网站时,购物车拥有的商品状态便不复存在.客户端和服务器必须有通信的媒介,方便服务器追踪客户端的状

asp.net MVC 中 Session统一验证的方法

验证登录状态的方法有:1  进程外Session   2 方法过滤器(建一个类继承ActionFilterAttribute)然后给需要验证的方法或控制器加特性标签 3 :新建一个BaseController  继承Controller   把后面需要验证的控制器都改成继承BaseController   而不是Controller [csharp] view plain copy print? namespace Core.ProjectOA.WebApp.Controllers { publ