我對posix線程非常新穎,我需要從函數內部啓動和管理線程,這可能嗎?從函數內部啓動線程
我讀過github上的例子,它們非常有幫助,但我仍然無法實現解決方案。
https://github.com/krakjoe/pthreads/tree/master/examples
我有邏輯,不斷增加任務的RabbitMQ。然後我有邏輯消耗這些任務並運行它們。我想使用pthreads並行地運行它們 - 所以每次任務被添加到rabbitmq時,線程立即開始處理它。
無論何時需要使用任務,RabbitMQ都會調用函數或類方法(我指定)。
此代碼已被簡化,以便其更容易閱讀
爲了證明我已經安裝和工作並行線程,這個工程:
<?php
$workers = [];
foreach (range(0, 5) as $i) {
$workers[$i] = new WorkerThread($i);
$workers[$i]->start();
}
這不起作用:
<?php
$workers = [];
$callback = function($msg)
{
$i = $msg->uniqueKey;
$workers[$i] = new WorkerThread($i, $msg);
$workers[$i]->start();
};
$channel->basic_consume('queue', '', false, true, false, false, $callback);
我的問題是,我不能初始化並從函數內部啓動一個線程並讓它們並行運行。
我也嘗試過直接啓動線程而不必調用函數。但是,這並不工作,因爲我要調用start方法並不能做到這一點,發送額外的參數,即使我可以覆蓋該方法,並呼籲家長,這將是一個巨大的黑客:
$channel->basic_consume('queue', '', false, true, false, false, [ new WorkerThread(), 'start' ]);
如何使用函數或方法啓動pthreads最好嗎?
我意識到這可能是一個非常初學者的問題,也許是一個壞問題,但任何幫助,非常感謝。
是的,這是可能的,否則將不會執行任何進程! –
'''use($ workers)'''似乎缺少了......目前,當控制離開Closure時'''workers''被銷燬,這會破壞WorkerThread包含... –
我已經實現了'$ callback = function($ msg)use($ workers)'但我得到了相同的結果 - 所有的邏輯運行,但仍然不是並行的。 –