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

相關文章
相關標籤/搜索