PHP parçacığı havuzu?

6 Cevap php

I have scheduled a CRON job to run every 4 hours which needs to gather user accounts information. Now I want to speed things up and to split the work between several processes and to use one process to update the MySQL DB with the retrieved data from other processes.

JAVA Ben bazı işler başarmak için bazı konuları adamak bir iş parçacığı havuzu olduğunu biliyoruz.

PHP bunu nasıl yapabilirim?

Herhangi bir tavsiye açığız.

Teşekkür

6 Cevap

Diğerleri söylediler, süreçleri bölmek PHP ile konuları yumurtlama daha kolaydır. Ama neden geri veritabanına sonuçları yazmak için tek bir özel konu olan iyi bir fikir olduğunu düşünüyorsunuz? Bu iş parçacığı ziyade süreçleri, genel hedefe herhangi bir değer eklemek için görünmüyor onun hala karmaşık bir yükü ile yapmak biraz daha basit olsa.

Gerçekten de, bir çok basit cron yerine PHP kodu içinde bir çatal başlatma (bazı verileri bölümlemek parametresi ile) komut çeşitli örneklerini başlatmak için - ve geri veritabanına veri kayıt için herhangi bir darboğaz ile rahatsız .

C.

PHP muhtemelen çoklu iş parçacığı için en uygun dil değildir.

Sen farklı çözümler için bir göz atmak isteyebilirsiniz. Örneğin, Thrift Eğer kolayca istenilen davranışı uygulamak Java arka-uç ile konuşurken bir PHP ön uç olmasını sağlar.

Eğer hala PHP bunu yapmak istiyorsanız, bir göz atmak isteyebilirsiniz:

http://www.php.net/pcntl

http://www.electrictoolbox.com/article/php/process-forking/

PHP ve Konular (bu 2 kelime) aynı cümlede birlikte gidemem. PHP parçacığı desteği sunmuyor. Sen mekanizmaları veya sizin durumunuzda yararlı değildir uyumsuz işlem çatallamak PCNTL deneyebilirsiniz.

Eğer (bunu google öneririm) Gearman bir göz alarak istediğiniz ne olabilir bir iş yükü dağılımı mekanizması kullanabilirsiniz.

Başkaları tarafından açıklandığı gibi "işleri hızlandırmak için" amacıyla aradığınız iş yükü dağılımını sunabilir "dağıtılmış bir çatallaşma makinedir".

Saygılarımızla,

Chech these posts - * http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html * http://www.electrictoolbox.com/article/php/process-forking/

Temelde süreçler arasında veri paylaşmak gerekir ve gördüğünüz gibi, muhtemelen ilk olarak bazı dosya için yazmak gerekir. Ana süreci (bir ajax-yoklama tip bir işlem yapmak) kullanarak Fetch ve DB için yazıyorum.

Siz de PHP yeni süreçleri çatal: pcntl_fork()

BTW. Bu komut 4 saatten daha uzun süre çalışıyor? Aksi takdirde iplik veya süreç yönetimi ile karmaşık bir neden görmüyorum.

Ayrıca uyumsuz HTTP çağrıları kullanarak bir iş parçacığı havuzu yöneticisi dahil, diş simüle etmek için nasıl gösterir bu yazı, ve bir web sunucusu kontrol edebilirsiniz:

http://w-shadow.com/blog/2008/05/24/improved-thread-simulation-class-for-php/