日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
php程序阻塞與非阻塞的區(qū)別是什么

本文操作環(huán)境:Windows10系統(tǒng)、php7.1版、Dell G3電腦。

創(chuàng)新互聯(lián)公司的客戶來(lái)自各行各業(yè),為了共同目標(biāo),我們?cè)诠ぷ魃厦芮信浜?,從?chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對(duì)我們的要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、電商網(wǎng)站開(kāi)發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開(kāi)發(fā)。

阻塞和非阻塞關(guān)注的是程序在等待調(diào)用結(jié)果(消息,返回值)時(shí)的狀態(tài).

阻塞調(diào)用是指調(diào)用結(jié)果返回之前,當(dāng)前線程會(huì)被掛起。調(diào)用線程只有在得到結(jié)果之后才會(huì)返回。

非阻塞調(diào)用指在不能立刻得到結(jié)果之前,該調(diào)用不會(huì)阻塞當(dāng)前線程。

1.php并發(fā)阻塞

  對(duì)于php來(lái)說(shuō)并發(fā)是個(gè)問(wèn)題,工作中經(jīng)常會(huì)碰到一些,寫(xiě)庫(kù)之前的查詢,判斷數(shù)據(jù)是否存在,但是如果并發(fā)的情況下,就會(huì)導(dǎo)致數(shù)據(jù)重復(fù)寫(xiě)入,而你的判斷也成了虛設(shè)。所以有了阻塞,我們需要把請(qǐng)求一條一條的執(zhí)行。

簡(jiǎn)單介紹:

1.首先,讀寫(xiě)方式打開(kāi)或者創(chuàng)建文件lock.txt文件

2.給lock.txt文件上 "獨(dú)占鎖",上鎖成功后就可以進(jìn)行下一步"處理訂單商品數(shù)據(jù)了"

3.處理完數(shù)據(jù)后,要"釋放鎖”,以及fclose關(guān)閉打開(kāi)的文件

注意:給文件“獨(dú)占鎖”后,如果再?zèng)]有里面的“釋放鎖”,會(huì)出現(xiàn)非??ǖ那闆r

public function index(){
    $fp = fopen("lock.txt", "w+");
    if(flock($fp,LOCK_EX))
    {
        $find=Db::name('user')->where('username','name2')->find();
        if($find){
            $data['username']='name3';
            $data['password']='';
            $data['password_m']='';
            Db::name('user')->insert($data);
        }else{
            $data['username']='name2';
            $data['password']='';
            $data['password_m']='';
            Db::name('user')->insert($data);
        }
        flock($fp,LOCK_UN);
    }
    fclose($fp);
    return 'success';
}

注意:對(duì)于小并發(fā)可行,而且性能不會(huì)出現(xiàn)大的影響。并發(fā)小于500較好,如果過(guò)高的話,建議使用隊(duì)列模式。

2.php非阻塞模式

非阻塞模式我們常用在php程序內(nèi)部調(diào)用第三方api接口,或者不需要等待結(jié)果的程序。

舉一個(gè)簡(jiǎn)單的例子。發(fā)送郵件,你要發(fā)送給你的所有的老大,那么你需要全部都發(fā)送一遍,也許你得寫(xiě)一個(gè)循環(huán),那么這一個(gè)循環(huán)中發(fā)郵件的方法需要執(zhí)行時(shí)間,需要拿到返回值,執(zhí)行下一次循環(huán),這個(gè)時(shí)間依次累加,最后時(shí)間會(huì)邊的很長(zhǎng),

那么這種被稱之為阻塞,而我們一直想要的是提交過(guò)去,不需要等待返回?cái)?shù)據(jù),你就循環(huán)的跑一遍就好了,那么我們想的這個(gè)就是非阻塞模式。對(duì)于這種的話,php也沒(méi)有什么好的函數(shù)來(lái)處理,所以我們做的最多的還是隊(duì)列出來(lái),發(fā)郵件的時(shí)候,

根據(jù)隊(duì)列去執(zhí)行,其實(shí)用到的還是阻塞模式。但是我們的請(qǐng)求執(zhí)行時(shí)間會(huì)被壓縮的很短,最常用的就是調(diào)用API接口,而你此時(shí)又不關(guān)心返回值的時(shí)候。


網(wǎng)站名稱:php程序阻塞與非阻塞的區(qū)別是什么
路徑分享:http://www.dlmjj.cn/article/ccsoedg.html