•   引子

    我们来看两个ajax方法,先后的问题,会有什么样的结果?

Javascript:

  $(function () {
//第一个
$.ajax({
type: "POST",
url: "/Home/Method1",
success: function (msg) {
$('#m1').html('第一个方法完成');
}
});
//第二个
$.ajax({
type: "POST",
url: "/Home/Method2",
success: function (msg) {
$('#m2').html('第二个方法完成');
}
});
});

服务端

  public class HomeController : Controller
{
//
// GET: /Home/ public ActionResult Index()
{
Session["test"] = ;
return View();
} public ActionResult Method1()
{
Thread.Sleep();
return Json("");
} public ActionResult Method2()
{
return Json("");
} }

       本以为:两个ajax是异步请求,谁先处理完,就谁先返回回来。

可是现实却大大出乎我的意料。见下图。

明显第二个请求是等第一个请求处理完了,才执行的。

  • 根源

其实问题是出现在Session上,那么我们把Session["test"]  去掉,这样再看结果:

原来妖孽就是Session,同一会话,即请求的SessionId是相同的,都会初始化Session对象,并锁住Session对象;其他同一会话的请求要用到Session对象,只能等待。因此才会出现前面的情况。

  • 解决

只需要标识当前会话session行为为只读行为,就不会加锁

       [SessionState(SessionStateBehavior.ReadOnly)]
[SessionState(SessionStateBehavior.ReadOnly)]
public class HomeController : Controller
{
//
// GET: /Home/ public ActionResult Index()
{
Session["test"] = ;
return View();
} public ActionResult Method1()
{
Thread.Sleep();
return Json("");
} public ActionResult Method2()
{
return Json("");
}
}

结果符合表述,如下图:

Session阻塞 读写锁引发的小问题的更多相关文章

  1. linux使用读写锁pthread_rwlock_t

    转自:http://blog.csdn.net/onlyou930/article/details/6755593 使用读写锁 配置读写锁的属性之后,即可初始化读写锁.以下函数用于初始化或销毁读写锁. ...

  2. UNIX环境高级编程——线程同步之互斥锁、读写锁和条件变量(小结)

    一.使用互斥锁 1.初始化互斥量 pthread_mutex_t mutex =PTHREAD_MUTEX_INITIALIZER;//静态初始化互斥量 int pthread_mutex_init( ...

  3. pthread_rwlock pthread读写锁

    原文: http://www.cnblogs.com/diegodu/p/3890450.html 使用读写锁 配置读写锁的属性之后,即可初始化读写锁.以下函数用于初始化或销毁读写锁.锁定或解除锁定读 ...

  4. 【漫画】互斥锁ReentrantLock不好用?试试读写锁ReadWriteLock

    ReentrantLock完美实现了互斥,完美解决了并发问题.但是却意外发现它对于读多写少的场景效率实在不行.此时ReentrantReadWriteLock来救场了!一种适用于读多写少场景的锁,可以 ...

  5. php session 读写锁

    php session 读写锁 先看一个样例,功能: 1.点击页面中一个button,ajax运行php,php中用session记录运行到哪一步. 2.使用ajax轮询还有一个php,获取sessi ...

  6. 【php】session读写锁

    事件:a文件中操作$_SESSION['start'] = 'yes'; sleep(100);  休眠100s 在这休眠的时间段中,b文件操作$_SESSION['start'] = 'no'; 结 ...

  7. 第45天学习打卡(Set 不安全 Map不安全 Callable 常用的辅助类 读写锁 阻塞队列 线程池)

    Set不安全  package com.kuang.unsafe; ​ import java.util.*; import java.util.concurrent.CopyOnWriteArray ...

  8. JUC 并发编程--04 常用的辅助类CountDownLatch , CyclicBarrier , Semaphore , 读写锁 , 阻塞队列,CompletableFuture(异步回调)

    CountDownLatch 相当于一个减法计数器, 构造方法指定一个数字,比如6, 一个线程执行一次,这个数字减1, 当变为0 的时候, await()方法,才开始往下执行,, 看这个例子 Cycl ...

  9. golang互斥锁和读写锁

    一.互斥锁 互斥锁是传统的并发程序对共享资源进行访问控制的主要手段.它由标准库代码包sync中的Mutex结构体类型代表.sync.Mutex类型(确切地说,是*sync.Mutex类型)只有两个公开 ...

随机推荐

  1. conflict between "Chinese_PRC_CI_AI" and "Chinese_PRC_CI_AS" in the equal to operation

    在SQL SERVICE做关联查询的时候遇到了"conflict between "Chinese_PRC_CI_AI" and "Chinese_PRC_CI ...

  2. IDE编辑器编码配置

    做跨平台开发时,大家用不同的IDE合作开发,最令人头疼的事就是各种乱码问题. 常用的IDE都支持utf-8编码和unix格式行尾'\n'. 1.XCODE设置文本编码及换行Xcode >> ...

  3. css3实现颜色渐变以及兼容性处理

    有时我们会看到网站上的一些图片是渐变色的,这些图片有的是ui设计出来的,有的则是直接通过css3制作出来的.下面就讲一下css3实现渐变色的方法,以及在各个浏览器上的兼容性. CSS3 Gradien ...

  4. js 同for一样效果 (延迟)每秒循环一次 追加

    <script type="text/javascript"> var j = 1;        var timeID = null;        function ...

  5. nmon--非常棒的LINUX/AIX性能计数器监测和分析工具

    转自51Testinghttp://bbs.51testing.com/viewthread.php?tid=116526 经常看到很多人讨论说loadrunner对linux/aix的性能监测太少, ...

  6. Java面试常见各种概念区别比较

    Hashtable 和 HashMap之间的区别 Hashtable是继承了Dictionary,是线程安全的.HashMap实现了Map接口,不是线程安全的.HashMap是Hashtable的轻量 ...

  7. typeof(self) 的作用

    block对于其变量都会形成strong reference,对于self也会形成strong reference ,而如果self本身对block也是 strong reference 的话,就会形 ...

  8. ObReferenceObjectByName函数调用WIN7下的解决

    <寒江独钓 Windows内核安全编程>第4章键盘的过滤ctrl2cap代码中,ObReferenceObjectByName函数调用: [1]extern POBJECT_TYPE Io ...

  9. Myeclipse安装SVN插件(转)

    方法一:在线安装 1.打开HELP->MyEclipse Configuration Center.切换到SoftWare标签页. 2.点击Add Site 打开对话框,在对话框Name输入Sv ...

  10. pom 详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...