首頁  >  文章  >  後端開發  >  file_put_contents遇見檔案排他鎖是是否會佇列等待

file_put_contents遇見檔案排他鎖是是否會佇列等待

WBOY
WBOY原創
2016-10-17 09:30:162081瀏覽

file_put_contents('test.txt',$data,FILE_APPEND|LOCK_EX);
如上語句,假如正在進行大數據量的檔案寫入操作,會佔用較長時間,後續的file_put_contents也要寫入數據,由於檔案具有排他鎖,後續的file_put_contents是否會成為佇列進行等待上一個檔案寫入操作執行完畢

回覆內容:

file_put_contents('test.txt',$data,FILE_APPEND|LOCK_EX);
如上語句,假如正在進行大數據量的檔案寫入操作,會佔用較長時間,後續的file_put_contents也要寫入數據,由於檔案具有排他鎖,後續的file_put_contents是否會成為佇列進行等待上一個檔案寫入操作執行完畢

是,file_put_contents的實現其實就是fopen,fwrite,fflush,fclose的這套操作的簡單實現。如果加上LOCK_EX,fopen之後還會執行一個flock,之後這段程式碼會一直阻塞到獲放檔案鎖後才會繼續執行。這個等待是以隊列方式進行排序的.

另外過大的檔案寫入,可能會超過PHP的最大執行事件,有遺失資料的風險,如果資料對你比較重要建議自行實現大資料量的寫入佇列

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn