session 锁定致使并发阻塞

最近在使用到ajax进行异步获取数据时,一个页面中存在2个ajax异步执行 php

根据观察,第一个ajax请求发起成功,这个请求得php运算100秒后才返回结果
第二个ajax在第一个请求发起后也跟随发起请求,第二个请求php运算10秒就能够发回结果,
可是结果倒是得第一个请求彻底执行完成返回结果后第二个才跟随返回。 ajax

缘由在于执行session_start()后 对应的session文件是被锁定的,直到当前脚本结束才会解锁。
在锁按期间,另外一个进程访问相同session id 要等文件解锁后session_start()才会开始。
解决办法是在 session 设置好数据后调用 session_write_close() 将数据写入文件而且结束session


例如以下代码
PHP code
<?php
session_start();
$_SESSION["count"]=1;
session_write_close();
sleep(10);

?>
若是不加入session_write_close();
并发3个进程访问该页面,第一个进程执行10秒 第二个执行20秒 第三个执行30秒。
加入session_write_close()后 
并发3个进程会同时在10秒后执行完成 session

相关文章
相关标签/搜索