tôi có mã đó là một chút như thế này:Gọi một hàm trong một sợi nền/quá trình (forking)
($i=0; $i < 100; $i++)
{
do ($foo[$i]);
}
Trên đây là một nhiệm vụ chuyên sâu thời gian, và tôi đã hy vọng để có thể tạo ra một chức năng, và gọi nó là hai lần như dưới đây
function wrapper($start;$end)
{
($i=$start; $i < $end; $i++)
{
do ($foo[$i]);
}
}
//have both of these run in parallel
wrapper(0,50);
wrapper(51,100);
tôi nhìn gearman nhưng tôi không thể sử dụng nó như tôi không thể cài đặt máy chủ gearman (kể từ khi tôi đang trên một máy chủ chia sẻ). Nó có vẻ như cách để đạt được điều này sẽ là do forking. Tôi đã cố gắng đọc rất nhiều về nó, nhưng tài liệu và hỗ trợ là rất ít. Mọi mã trợ giúp/wireframe sẽ được đánh giá cao.
Để xác định câu hỏi của tôi, làm cách nào tôi có thể gọi số wrapper()
chuyển qua các đối số sao cho nó thực thi trong quá trình con. Ngoài ra, điều quan trọng là tôi có thể đăng ký chức năng gọi lại.
Chi tiết bổ sung: PHP 5.3, chạy trên máy chủ Linux. Tập lệnh được thực thi bởi cgi-fcgi.
Tôi nghĩ rằng đây là cách tôi phải tạo ra một tiến trình con, nhưng làm thế nào tôi có thể sử dụng nó để sinh ra nhiều tiến trình con? Và làm cách nào để đăng ký chức năng gọi lại?
$pid = pcntl_fork();
if ($pid == -1) {
// Fork failed
exit(1);
} else if ($pid) {
// The parent process
//should I repeat this same code here to spawn another child process?
} else {
// the child process
//can I call wrapper from here and will it run in this child process?
Cảm ơn. Điều này có vẻ giống như một wrapper rực rỡ. Tôi đang xem xét mã ngay bây giờ – xbonez
Liên kết mà bạn tham chiếu cũng cho biết thật tệ khi sử dụng vòng lặp trống để kiểm tra xem chuỗi có còn hoạt động hay không, vì nó sẽ sử dụng hết tất cả CPU của bạn. Bạn nên bao gồm một giấc ngủ trong vòng lặp. – Kelvin
@Kelvin, một giải pháp tốt hơn là triển khai khả năng 'join' vào thư viện, nên khá đơn giản để thực hiện. –