Dikkat Edilmesi Gerekenler
Zamanlayıcı Kullanımında Dikkat Edilmesi Gerekenler
-
Zamanlayıcı yalnızca
onXXXXgeri çağrısı içinde eklenebilir. Küresel zamanlayıcılarınonWorkerStartgeri çağrısında ayarlanması önerilir, belirli bir bağlantıya özel zamanlayıcıların iseonConnectiçinde ayarlanması tavsiye edilir. -
Eklenen zamanlayıcı görevleri, mevcut işlem içinde (yeni bir işlem veya iş parçacığı başlatmadan) çalıştırılır; ağır görevler mevcut işlemin diğer görevleri yürütmesini etkileyebilir, bu nedenle zaman alan görevlerin ayrı bir işlemde çalıştırılması en iyisidir. Örneğin, bir veya daha fazla Worker işlemi başlatmak.
-
Mevcut işlemde swoole/swow coroutine aktif değilse, mevcut işlem diğer işler ile meşgul olduğunda veya bir görev beklenen süre içinde tamamlanmadığında ve bir sonraki çalışma döngüsüne geldiğinde, mevcut görevin bitmesini bekleyecek, bu da zamanlayıcının beklenen zaman aralığında çalışmamasına neden olacaktır. Yani mevcut işlemin iş yükü tamamen seri olarak yürütülmektedir; çoklu işlemlerde ise işlem arasındaki görevler paralel olarak çalışmaktadır.
-
Çoklu işlemde zamanlayıcı görevleri ayarlamanın eşzamanlılık sorunlarına neden olabileceğine dikkat edilmelidir; aşağıdaki kod her saniye 5 kez yazdıracaktır.
$worker = new Worker(); // 5 işlem $worker->count = 5; $worker->onWorkerStart = function(Worker $worker) { // 5 işlem, her bir işlemin böyle bir zamanlayıcısı var Timer::add(1, function(){ echo "hi\r\n"; }); }; Worker::runAll();Eğer yalnızca bir işlemin zamanlayıcıyı çalıştırmasını istiyorsanız, Timer::add Örnek 2 kısmına başvurun.
-
Yaklaşık 1 milisaniye kadar hata payı olabilir.
-
Zamanlayıcılar işlem arasında silinemez; örneğin, a işleminde ayarlanan bir zamanlayıcı, b işleminde doğrudan Timer::del arayüzü ile silinemez.
-
Farklı işlemler arasındaki zamanlayıcı kimlikleri tekrarlanabilir, ancak aynı işlem içinde üretilen zamanlayıcı kimlikleri tekrarlanmayacaktır.
-
Sistem saatinin değiştirilmesi, zamanlayıcının davranışını etkileyebilir, bu nedenle sistem saatini değiştirdikten sonra restart ile yeniden başlatma önerilir.