鍍金池/ 問(wèn)答/PHP/ PHP先后請(qǐng)求調(diào)用一個(gè)方法,如果過(guò)第一次請(qǐng)求處理沒(méi)結(jié)束,第二次又調(diào)用會(huì)有什么影響

PHP先后請(qǐng)求調(diào)用一個(gè)方法,如果過(guò)第一次請(qǐng)求處理沒(méi)結(jié)束,第二次又調(diào)用會(huì)有什么影響?

后臺(tái)定時(shí)任務(wù)輪詢調(diào)用一個(gè)方法,每秒執(zhí)行一次,主要是從數(shù)據(jù)庫(kù)取出幾十條數(shù)據(jù)循環(huán)進(jìn)行處理,處理結(jié)束整個(gè)循環(huán)大概要3秒鐘,每秒輪詢的話,第一次還沒(méi)處理完,緊接著調(diào)用會(huì)有什么影響嗎?它是怎樣的一個(gè)執(zhí)行流程,是會(huì)被阻塞嗎?還是我需要使用文件鎖,當(dāng)循環(huán)執(zhí)行完成再釋放

回答
編輯回答
淡墨

第一次沒(méi)執(zhí)行完,再次調(diào)用會(huì)再執(zhí)行一次,因?yàn)椴煌倪M(jìn)程再處理,這肯定不是你想要的結(jié)果,所以你需要自行處理掉,文件鎖或者redis鎖都行。

2018年5月6日 01:51
編輯回答
護(hù)她命

這個(gè)問(wèn)題可以思考下,當(dāng)多用戶同時(shí)點(diǎn)贊該文章的時(shí)候是怎么實(shí)現(xiàn)的?因?yàn)椴僮鞯牧鞒桃话闶侨≈?,修改,存值。如果它們都是同時(shí)操作,不考慮誤差,不做其它處理,那么大家所操作的流程都是 獲取 0 ,修改 0 + 1 ,保存 1.

2018年8月22日 18:09
編輯回答
亮瞎她

首先這個(gè)問(wèn)題本質(zhì)就是一個(gè)并發(fā)處理互斥資源的問(wèn)題

  1. 解決你提問(wèn)的的最簡(jiǎn)單方法,啟動(dòng)一個(gè)進(jìn)程,依次處理,然后再迭代即可

偽代碼:

<?php
# do.php
while(true) {
    $rows = mysql_fetch_rows();
    foreach ($rows as $row) {
        do_something(row);
        usleep(500000);
    }
    //todo record log
    sleep(1);
}

php do.php
  1. 進(jìn)階處理:你可以學(xué)習(xí)多進(jìn)程,分布式鎖相關(guān)來(lái)做資源互斥的處理(文件鎖,redis鎖,zookeeper鎖都可以);

當(dāng)然直接利用mysql的排他鎖也可以簡(jiǎn)單解決一個(gè)互斥問(wèn)題,不過(guò)會(huì)帶來(lái)更多其他問(wèn)題

2017年7月16日 04:09