php linux下使用訊息佇列的例子

2022-01-12 06:15:19 字數 4733 閱讀 6703

linux下php可以玩玩system v的一系列函式了,尤其感興趣的是訊息佇列和訊號量,先來用用訊息佇列.

msg_queque.php

$key

=ftok(

__file__,'

a');//

訊息佇列例項化

$mq=

msg_get_queue(

$key

,0666

);

for($i

=0;$i

<10;

$i++):

//fork子程序

$pid

=pcntl_fork();if(

$pid) :

$time

=explode("

",microtime

());

//推入佇列

msg_send(

$mq,1,

"父程序".

posix_getppid()."

".($time[0

]+$time[1

]));

elseif

($pid==0

) :$psid

=posix_getpid();

$time

=explode("

",microtime

());

//推入佇列

msg_send(

$mq,1,

"子程序".

$psid."

".($time[0

]+$time[1

]));

posix_kill(

$psid

,sigterm);

endif

;endfor;do

while

(true

);

shell下執行php

#php -f msg_queue.php

得到結果

1315556148.4539

1315556148.4546

1315556148.455

1315556148.4553

1315556148.4557

1315556148.456

1315556148.4564

1315556148.4568

1315556148.4572

子程序[

51315556148.4575

子程序[

41315556148.458

子程序[

61315556148.4596

子程序[

31315556148.4584

子程序[

21315556148.4606

子程序[

71315556148.461

子程序[

11315556148.4615

子程序[

81315556148.462

子程序[

01315556148.4624

1315556148.463

子程序[

91315556148.4804

程序們素質很高的進行排隊了,他們可以通過訊息佇列互相通告對方一些東西。

ipcs檢視下,發現

------

shared memory segments

--------

key shmid owner perms bytes nattch status

0x00000000

65536

lake

600393216

2dest

0x00000000

98305

lake

600393216

2dest

0x00000000

131074

lake

600393216

2dest

0x00000000

163843

lake

600393216

2dest

0x00000000

196612

lake

600393216

2dest

0x00000000

229381

lake

600393216

2dest

0x00000000

262150

lake

600393216

2dest

0x00000000

294919

lake

600393216

2dest

0x00000000

327688

lake

600393216

2dest

0x00000000

360457

lake

600393216

2dest

0x00000000

393226

lake

600393216

2dest

0x00000000

425995

lake

600393216

2dest

0x00000000

458764

lake

600393216

2dest

0x00000000

491533

lake

600393216

2dest

0x00000000

524302

lake

600393216

2dest

0x00000000

688143

lake

600393216

2dest

0x00000000

5177360

lake

6004

2dest

0x00000000

5505041

lake

6004

2dest

0x00000000

5373970

lake

6004

2dest

0x00000000

19103763

lake

600393216

2dest

0x00000000

5472276

lake

6664

2dest

0x00000000

5275669

lake

6664

2dest

0x00000000

5341206

lake

6664

2dest

0x00000000

19136535

lake

600393216

2dest

0x00000000

1736728

lake

600393216

2dest

0x00000000

10190878

lake

600393216

2dest

0x00000000

21725226

lake

600393216

2dest

0x00000000

21757995

lake

600393216

2dest

------

semaphore arrays

--------

key semid owner perms nsems

0x00000000

0www

-data

6001

------

message queues

--------

key msqid owner perms used

-bytes messages

0x610845ec

32768

root

6660

0

三個區間分別是共享記憶體,訊號量,訊息佇列,ipcrm -q 32768即可清空剛才生成的訊息佇列。

訊息佇列 訊息佇列

輪詢排程 一次性分發所有訊息,保證訊息平均分配,不管消費者是否能正常消費 訊息應答 保證消費端能確實消費,不丟失 公平 乙個乙個分發所有訊息,在保證分發到的執行緒確認回覆後,才分發下個訊息給下個空閒的消費者,訊息持久化 保證佇列中的訊息不丟失,包括3要素 交換器 訊息佇列 訊息都必須宣告持久化 發布...

訊息佇列的使用

剛開始看的時候,由兩個疑問,我自己的答案是這樣的 1.訊息佇列在系統中的最大個數,關於這個問題,書上有明確的答案 書上有個 列明了linux free bsd,mac os x solaris中的典型值。當然也可以通過一些手段來修改。sysctl就可以修改。2.在多個執行緒 或程序 同時對乙個訊息佇...

訊息佇列 訊息佇列 kafka

kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...