【问题标题】:System V Semaphore usage in PHPPHP 中 System V 信号量的使用
【发布时间】:2011-09-20 00:18:41
【问题描述】:

我的回答很简单: 是否可以在 PHP 中使用 system_v 信号量来解决生产者-消费者问题? 我的意思是,可以在here 找到经典的 prod-cons 解决方案。

semaphore fillCount = 0; // items produced
semaphore emptyCount = BUFFER_SIZE; // remaining space

procedure producer() {
    while (true) {
        item = produceItem();
        down(emptyCount);
            putItemIntoBuffer(item);
        up(fillCount);
    }
}

procedure consumer() {
    while (true) {
        down(fillCount);
            item = removeItemFromBuffer();
        up(emptyCount);
        consumeItem(item);
    }
}

正如您所见,生产者在将项目放入缓冲区后增加了fillCount。 无论如何,正如我在 php-doc 中所理解的那样,您只能使用 sem_acquire 和 sem_release 来操作信号量,并且您不能在没有获得它之前调用 sem_release。 您知道如何解决这个问题吗?

【问题讨论】:

    标签: php concurrency semaphore


    【解决方案1】:

    如果很重要,请考虑使用真正的消息队列服务器:RabbitMQ、OpenAMQ、ActiveMQ、ZeroMQ、beanstalkd、。使用信号量或其他本地机制不会扩展到单个服务器之外。

    【讨论】:

    • 当然……你是对的。它只是用于学术目的:D
    • 无论如何,这是我第一次阅读 RabbitMQ(我之前阅读过 NodeJS、Ajax 推送引擎等),但它们似乎都不是那么好! =)
    猜你喜欢
    • 2014-11-21
    • 2017-01-24
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 2011-08-31
    • 2014-08-25
    • 2016-10-01
    • 2015-09-30
    相关资源
    最近更新 更多