久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

簡單了解php進(jìn)程通信之信號量

本篇文章給大家?guī)砹岁P(guān)于PHP的相關(guān)知識,信號量又稱為信號燈、旗語 用來解決進(jìn)程(線程同步的問題),類似于一把鎖,訪問前獲取鎖(獲取不到則等待),訪問后釋放鎖,文中通過示例代碼介紹的非常詳細(xì),希望對大家有幫助。

簡單了解php進(jìn)程通信之信號量

(推薦教程:PHP視頻教程)

常見進(jìn)程通信方式

簡單了解php進(jìn)程通信之信號量

一些理論基礎(chǔ)

  • 臨界資源:每次僅允許一個進(jìn)程訪問的資源。
  • 臨界區(qū):每個進(jìn)程中訪問臨界資源的那段代碼叫臨界區(qū)

所謂臨界區(qū)(也稱為臨界段)就是訪問和操作共享數(shù)據(jù)的代碼段。

進(jìn)程互斥:兩個或以上的進(jìn)程不能同時進(jìn)入關(guān)于同一組共享變量的臨界區(qū)域,即一個進(jìn)程正在訪問臨界資源,另一個進(jìn)程要想訪問必須等待。

進(jìn)程同步:主要研究如何確定數(shù)個進(jìn)程之間的執(zhí)行順序和避免數(shù)據(jù)競爭的問題 即,如何讓多個進(jìn)程能一塊很好的協(xié)作運(yùn)行

所謂同步,就是并發(fā)進(jìn)程/線程在一些關(guān)鍵點(diǎn)上可能需要互相等待與互通消息,這種相互制約的等待與互通信息稱為進(jìn)程/線程同步。

舉個生活的同步例子,你肚子餓了想要吃飯,你叫媽媽早點(diǎn)做菜,媽媽聽到后就開始做菜,但是在媽媽沒有做完飯之前,你必須阻塞等待,等媽媽做完飯后,自然會通知你,接著你吃飯的事情就可以進(jìn)行了。

注意,同步與互斥是兩種不同的概念:

同步就好比:「操作 A 應(yīng)在操作 B 之前執(zhí)行」,「操作 C 必須在操作 A 和操作 B 都完成之后才能執(zhí)行」等;

互斥就好比:「操作 A 和操作 B 不能在同一時刻執(zhí)行」;

system V 信號量

信號量用途:主要用于多進(jìn)程或多線程對公共資源對象的訪問控制。 用來解決多進(jìn)程(多線程同步的問題),類似于一把鎖,訪問前獲取鎖(獲取不到則等待),訪問后釋放鎖。

多進(jìn)程/多線程一般是并發(fā)執(zhí)行,如果對公共資源訪問沒有做同步處理,很容易造成數(shù)據(jù)破壞

信號量其實(shí)是一個整型的計(jì)數(shù)器,主要用于實(shí)現(xiàn)進(jìn)程間的互斥與同步,而不是用于緩存進(jìn)程間通信的數(shù)據(jù)。

信號量表示資源的數(shù)量,控制信號量的方式有兩種原子操作:

一個是 P 操作,這個操作會把信號量減去 -1,相減后如果信號量 < 0,則表明資源已被占用,進(jìn)程需阻塞等待;相減后如果信號量 >= 0,則表明還有資源可使用,進(jìn)程可正常繼續(xù)執(zhí)行。

另一個是 V 操作,這個操作會把信號量加上 1,相加后如果信號量 <= 0,則表明當(dāng)前有阻塞中的進(jìn)程,于是會將該進(jìn)程喚醒運(yùn)行;相加后如果信號量 > 0,則表明當(dāng)前沒有阻塞中的進(jìn)程;

P 操作是用在進(jìn)入共享資源之前,V 操作是用在離開共享資源之后,這兩個操作是必須成對出現(xiàn)的。

舉個類比,2 個資源的信號量,相當(dāng)于 2 條火車軌道,PV 操作如下圖過程:

簡單了解php進(jìn)程通信之信號量

一輛火車進(jìn)入軌道,相當(dāng)于信號量的P操作,資源-1,這樣就剩下一條軌道

簡單了解php進(jìn)程通信之信號量

接著又一輛火車占用另一條軌道,也就是P操作,資源-1

簡單了解php進(jìn)程通信之信號量

此時交通信號燈變?yōu)榧t色,因?yàn)闆]有軌道可用,第三輛火車必須等待

簡單了解php進(jìn)程通信之信號量

第一輛火車離開軌道,相當(dāng)于V操作,此時軌道資源為1,交通燈變?yōu)榫G燈

簡單了解php進(jìn)程通信之信號量

第三輛火車發(fā)現(xiàn)交通信號燈變綠,于是進(jìn)入火車軌道,軌道資源耗盡為0,于是交通信號燈變?yōu)榧t燈

簡單了解php進(jìn)程通信之信號量

在這個火車軌道系統(tǒng)中,軌道是公共資源,每輛火車好比一個線程,交通信號燈起的就是信號量的作用。信號量可以實(shí)現(xiàn)鎖的互斥操作,也可以實(shí)現(xiàn)進(jìn)程/線程同步

信號量類型

1)二進(jìn)制信號量(也叫二值信號量)

此時信號量的初值只能是0和1。(二進(jìn)制信號量可以實(shí)現(xiàn)互斥鎖操作)

2)一般/計(jì)數(shù)信號量

此時信號量的初值可以是任意非負(fù)數(shù)。顯然,其包含二進(jìn)制信號量。上面舉的火車軌道例子就可以使用計(jì)數(shù)信號量來實(shí)現(xiàn),一般計(jì)數(shù)信號量與鎖的區(qū)別是它可以允許多個線程/進(jìn)程(線程的數(shù)量由計(jì)數(shù)信號量初值定義) 同時操作公共資源

一般只有在開發(fā)多進(jìn)程的時候才可能遇到需要使用信號量的場景,phper 幾乎很少有使用信號量的場景,就算有多進(jìn)程對公共資源操作,大多也是使用 flock 文件鎖做互斥操作

php模擬多進(jìn)程操作公共資源

<?php $file = "num.txt";//定一個空文件 $count =0; file_put_contents($file,$count);  $pid = pcntl_fork();//fork 一個進(jìn)程  if($pid == 0){//子進(jìn)程執(zhí)行邏輯     $x = (int)file_get_contents($file);//讀取文件內(nèi)容     //i 循環(huán)累加     for($i=0; $i<1000; $i++){         $x = $x + 1;     }     //寫入文件     file_put_contents($file,$x);     //子進(jìn)程退出     exit(0); } //父進(jìn)程執(zhí)行邏輯 $x = (int)file_get_contents($file); for($i=0; $i<1000; $i++){     $x = $x+1; } //累加寫入 file_put_contents($file,$x);

在編寫一個shell 腳本輔助

#!/bin/bash for a in {1..1000} do     (php demo1.php)     b=`cat num.txt`     if [ $b != 2000 ]     then         echo -e "錯誤$b"     fi done

按理來說,變量 $x 最后寫入文件的值應(yīng)該是2000,但很不幸,并不是如此,我們對上面的腳本執(zhí)行一下:

簡單了解php進(jìn)程通信之信號量

運(yùn)行了1000次,發(fā)現(xiàn)出現(xiàn)了變量$x值結(jié)果是 1000 的有8次,雖然發(fā)生錯誤的概率比較小,但是在計(jì)算機(jī)里是不能容忍的。

為什么會出現(xiàn)這種情況,我們知道單核cpu系統(tǒng)里為了實(shí)現(xiàn)多個程序同時運(yùn)行的假象,操作系統(tǒng)通常都采用時間片調(diào)度,一個進(jìn)程時間片用完就切換下一個進(jìn)程運(yùn)行,加上我們的高級語言不是每一行代碼都是原子性的,比如x = (int)file_get_contents($file) 這行代碼對于我們來說是不可分割是原子性的,但是經(jīng)過編譯器編譯成匯編碼【機(jī)器指令】可能是多條指令實(shí)現(xiàn),這樣就會出現(xiàn)問題,如果指令只執(zhí)行到一半進(jìn)程分配的時間片用完或者被其他進(jìn)程打斷,都有可能造成數(shù)據(jù)損壞,導(dǎo)致最后計(jì)算結(jié)果出現(xiàn)誤差

使用php封裝system v 信號量集函數(shù)

<?php $file = "num.txt";//定一個空文件 $count =0; $key = ftok("demo1.php","x"); $sem_id = sem_get($key,1);// 第二個參數(shù)是個整數(shù),表示設(shè)置信號量集,設(shè)置為1 把它當(dāng)做二值信號量來用,用于互斥 file_put_contents($file,$count); $pid = pcntl_fork();//fork 一個進(jìn)程 if($pid == 0){//子進(jìn)程執(zhí)行邏輯 sem_acquire($sem_id); // P -1 操作 獲取一個信號量 , 如果為0表示資源被占用進(jìn)程掛起等待信號量釋放     $x = (int)file_get_contents($file);//讀取文件內(nèi)容     //i 循環(huán)累加     for($i=0; $i<1000; $i++){         $x = $x + 1;     }     //寫入文件     file_put_contents($file,$x);        sem_release($sem_id); //V +1 操作 釋放信號量     //子進(jìn)程退出     exit(0); } //父進(jìn)程執(zhí)行邏輯 sem_acquire($sem_id); // P -1 操作  獲取信號量, 如果為0表示資源被占用進(jìn)程掛起等待信號量釋放 $x = (int)file_get_contents($file); for($i=0; $i<1000; $i++){     $x = $x+1; } //累加寫入 file_put_contents($file,$x); sem_release($sem_id); //V +1 操作 釋放信號量

加入信號量后,那就一定保證100%是2000,絕對不會出現(xiàn)其他數(shù)值。

(推薦教程:PHP視頻教程)

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
久久久91麻豆精品国产一区| 国产一二在线播放| 国内精品福利| 伊人久久av| 超碰在线99| 日韩在线欧美| 精品一区毛片| 亚洲制服一区| 97精品国产福利一区二区三区| 日韩欧美午夜| 亚洲免费激情| 日本不卡一区二区| 另类综合日韩欧美亚洲| 日韩欧美一区免费| 一本色道精品久久一区二区三区| 亚洲www啪成人一区二区| 久久精品免费一区二区三区 | 老色鬼久久亚洲一区二区| 婷婷五月色综合香五月| 另类综合日韩欧美亚洲| 国产一在线精品一区在线观看| 日韩av黄色在线| 日韩欧美一区二区三区在线观看| 丝袜美腿一区二区三区| 国产成人黄色| 亚洲精品影院在线观看| 在线中文字幕播放| 男人的天堂久久精品| 欧美激情视频一区二区三区免费| 黄色日韩在线| 日韩欧美国产精品综合嫩v| 亚洲深深色噜噜狠狠爱网站| 岛国av免费在线观看| 97se亚洲| 日韩毛片网站| 国产一级久久| 国产拍在线视频| 免费在线观看日韩欧美| 亚洲伊人av| 国产三级一区| 99国产精品久久久久久久 | 午夜亚洲精品| 国语精品一区| 国产亚洲高清一区| 亚洲福利一区| 国产日韩欧美高清免费| 久久国产精品免费精品3p| 日本免费新一区视频| 欧美亚洲一级| 美女视频黄 久久| 国产高清精品二区| 国产伦理一区| 国产精品主播| 欧美亚洲tv| 欧美中文一区| 91精品国产自产观看在线| 亚洲精选成人| 国产精品普通话对白| 亚洲不卡av不卡一区二区| 黄毛片在线观看| 亚洲精品.com| 黄色精品网站| 免费成人在线影院| 美女国产精品| 国产欧美午夜| 成人在线黄色| sm捆绑调教国产免费网站在线观看 | 国产精品日韩精品中文字幕| 蜜桃伊人久久| 少妇精品在线| 日韩国产精品久久久| 欧美在线看片| 国产视频一区二区在线播放| 久久久国产精品网站| 欧美久久天堂| 蜜桃成人av| 最新亚洲国产| 国产精品伦一区二区| 日韩毛片在线| 亚洲精品影视| 午夜久久中文| 日韩激情一二三区| 精品久久免费| 自由日本语亚洲人高潮| 亚洲日本三级| 精品亚洲美女网站| 免费看欧美美女黄的网站| 欧美精品不卡| 一区二区高清| 日本久久成人网| 国产精品v亚洲精品v日韩精品| 久久亚洲国产| 欧美国产先锋| 欧美午夜三级| 丝袜亚洲精品中文字幕一区| 欧美韩日一区| 国产精品欧美三级在线观看| 中文一区在线| 欧洲亚洲一区二区三区| 国产伦精品一区二区三区视频| 国产综合欧美| 中文一区一区三区高中清不卡免费| 一区二区三区四区在线观看国产日韩| 国产欧美一区二区三区精品酒店| 久久99精品久久久野外观看| 亚洲精品在线a| 在线一区免费观看| 私拍精品福利视频在线一区| 国产精品九九| 亚洲一二三区视频| 九九综合在线| 日韩在线观看不卡| 天堂а√在线最新版中文在线| 精品99在线| 麻豆国产精品| 久久高清免费| 国产一区91| 欧美激情视频一区二区三区在线播放| 鲁鲁在线中文| 亚洲精品亚洲人成在线观看| 久久精品亚洲| 鲁大师影院一区二区三区| 国产精品三p一区二区| 久久久久久久久久久妇女| 中文字幕日韩欧美精品高清在线| 国产精品尤物| 午夜影院欧美| 国内精品伊人| 日韩二区在线观看| 午夜精品成人av| av一区二区高清| 999在线观看精品免费不卡网站| 亚洲精品在线观看91| 久久亚洲欧洲| 国产精品一区高清| 国产伦理一区| 色偷偷偷在线视频播放| 伊人精品视频| 欧美日韩精品一区二区三区视频 | 成人国产精品一区二区网站| 亚洲69av| 欧美有码在线| 高清日韩欧美| 1024精品久久久久久久久| 午夜精品网站| 日韩精品成人| 成人小电影网站| 最新亚洲国产| 国产一区二区三区不卡视频网站 | 国产精品一区二区美女视频免费看| 国产精品免费精品自在线观看| 一区二区精品伦理...| 午夜在线观看免费一区| 久久久国产精品入口麻豆| 9色精品在线| 国产精品chinese| 久久一区精品| 亚洲一区欧美| 国产美女高潮在线| 国产调教精品| 黑人精品一区| 欧美激情一区| 91精品美女| 蜜臀91精品一区二区三区| 亚洲少妇诱惑| 99日韩精品| 免费在线看一区| 亚洲精品网址| 亚洲二区视频| 激情久久久久久| 国产欧美日韩| 日本美女一区| 国产h片在线观看| 伊人网在线播放| 成人日韩在线观看| 久久久久久久久丰满| 久久精品导航| 亚洲手机在线| 日韩精品看片| av成人国产| 中文字幕成人| 国产精品66| 久久久久国产精品一区二区| 黄毛片在线观看| 欧美综合另类| 爽好多水快深点欧美视频| 日韩精品久久理论片| 老司机精品视频网| 久久久精品网| 蜜桃av一区二区三区电影| 国产美女亚洲精品7777| 日本欧美国产| 亚洲女人av| 在线观看一区| 精品亚洲二区| 午夜精品婷婷| 精品在线网站观看| 99国产精品99久久久久久粉嫩| 欧美精品中文字幕亚洲专区| 亚洲播播91|