什么是消息队列:
消息队列是消息的链接表,存储在内核中,由消息队列标识符标识。
通过linux所带的命令 可以查看消息队列 ipcs -q
我们可以通过msg_set_queue($resouce,[
msg_qbytes=2000
])设置这里面的消息,但是必须是root权限
$key=123456; if(msg_queue_exists($key)){ echo('msg'.$key.' is exists'); } $resource =msg_get_queue($key,0666); if(!$resource){ die('create queue fail'); } $data=msg_stat_queue($resource); print_r($data); //可以设置内核中的数据,单必须是root权限的用户才可以设置 msg_set_queue($resource,[ ]);
可以设置的参数如下:
Array
(
[msg_perm.uid] => 0
[msg_perm.gid] => 0
[msg_perm.mode] => 438
[msg_stime] => 0
[msg_rtime] => 0
[msg_ctime] => 1543357344
[msg_qnum] => 0
[msg_qbytes] => 65536
[msg_lspid] => 0
[msg_lrpid] => 0
)
信号量:与进程通讯不同,它是一个计数器,用于为多个进程提供对共享数据对象的访问,保证两个或多个关键代码不被并发调用。
和我们常说的文件锁是等效的。
信号量到底有什么用途?
信号量好比一把锁,防止一个变量 在多进程并发修改。类似不能让一件物超卖。
会占用资源,不被其他资源抢占。
要使用信号量函数,必须在PHP编译的时候,加上
--enable-sysvsem
编译成功后,就可以使用信号量相关的函数了。
下面我们看看信号量有哪些先关的函数:
sem_get() 得到一个信号量id
sem_acquire 获取一个信号量
sem_release 释放一个信号量
sem_remove 移除一个信号量
<?php $key=123456;
信号与信号量的区别
信号与信号量的区别:
1.信号:(signal)是一种处理异步事件的方式。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程外,还可以发送信号给进程本身。
2.信号量:(Semaphore)进程间通信处理同步互斥的机制。是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。