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 相比較傳統的訊息佇列,訊息被消費...