第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

請(qǐng)問有什么更好的方式可以給文件加 讀鎖?因?yàn)?,只需要讀文件。

請(qǐng)問有什么更好的方式可以給文件加 讀鎖?因?yàn)?,只需要讀文件。

PHP
大話西游666 2023-04-18 19:15:02
有大量文件需要處理。用一個(gè)php進(jìn)程去操作會(huì)很慢。如何在一個(gè)進(jìn)程讀某一個(gè)文件的時(shí)候,把文件鎖上。不讓其他進(jìn)程可以再讀而直接跳過,繼續(xù)讀其他的?把正在讀得文件rename,讀完之后再rename回來,效率挺低的。如果實(shí)在沒有更好的方法,就只能用這個(gè)了。flock,測(cè)試了一下,貌似不太好用,試了一下,沒實(shí)現(xiàn)文件的非阻塞讀鎖。給不同進(jìn)程分配不同的文件,不好實(shí)現(xiàn)。也沒數(shù)據(jù)庫。就算有。用數(shù)據(jù)庫做鎖,貌似比rename更低效。
查看完整描述

2 回答

?
GCT1015

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊

你的問題是:
1. 很多文件,想多進(jìn)程處理,以提高效率,縮短總處理時(shí)間
2. 這些進(jìn)程只需要讀文件,不需要寫
3. 對(duì)每個(gè)文件,只要有一個(gè)進(jìn)程處理過它就可以了,沒有多個(gè)進(jìn)程都必須處理它的需求

你的需求其實(shí)是分治,將文件分為多個(gè)組(不一定要在文件系統(tǒng)上新建目錄),然后分而治之,這種情況不需要用鎖.

鎖不是用于這種場(chǎng)景的,鎖用于下面這種場(chǎng)景:

1. 文件file.txt里面記錄了user1的銷售額和user2的銷售額,user1+user2的銷售總額
2. 進(jìn)程php1負(fù)責(zé)寫入user1的數(shù)據(jù),進(jìn)程php2負(fù)責(zé)寫入user2的數(shù)據(jù),兩個(gè)進(jìn)程各讀出銷售總額顯示給user1,user2
3. user1和user2同時(shí)要求寫入,真的是同時(shí),不是前后差個(gè)幾秒什么的

建議你這樣解決:
1. 啟動(dòng)多個(gè)PHP進(jìn)程(nohup php your_script.php your_dir &)
2. 每個(gè)PHP進(jìn)程賦予一個(gè)序號(hào)(假設(shè)4個(gè)進(jìn)程,那就0,1,2,3),可以通過對(duì)進(jìn)程自身的pid模運(yùn)算取余數(shù)得到,也可以在啟動(dòng)進(jìn)程的時(shí)候通過命令行傳入,隨你了
3. 每個(gè)進(jìn)程在處理文件前先對(duì)文件名做crc32()運(yùn)算,模一下進(jìn)程總數(shù): crc32(file_name) % 4, 取模結(jié)果與此進(jìn)程的序號(hào)相等就讀取內(nèi)容并處理,不相等就跳過


查看完整回答
反對(duì) 回復(fù) 2023-04-22
?
繁星點(diǎn)點(diǎn)滴滴

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊

用memcached實(shí)現(xiàn)吧。

比如讀取文件 $filename = "t.txt";

if(!$memcached->get($filename)){   //文件鎖不存在,那么執(zhí)行文件讀取功能   //首先再將文件鎖住,   $memcaced->save($filename,'1');   $fs = fopen($filename,'r+');
   
   fclose($fs);   //讀取完畢釋放文件鎖   $memcaced->delete($filename);
}else{   // 文件鎖已經(jīng)存在,跳過
   
}

以上是 memcaced 純內(nèi)存操作,速度會(huì)很快,根本不要考慮到性能的問題,當(dāng)然還有一種方法,采用真正的文件鎖,即添加一個(gè)新文件的方法控制,文件爭(zhēng)用,但是此方法將加大IO的開銷。


查看完整回答
反對(duì) 回復(fù) 2023-04-22
  • 2 回答
  • 0 關(guān)注
  • 132 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)