Lưu ý

Những điều cần lưu ý khi sử dụng bộ định thời

1、Chỉ có thể thêm bộ định thời trong callback onXXXX. Bộ định thời toàn cục nên được thiết lập trong callback onWorkerStart, còn bộ định thời cho một kết nối cụ thể nên được thiết lập trong onConnect.

2、Các nhiệm vụ định thời đã thêm sẽ được thực hiện trong tiến trình hiện tại (sẽ không khởi động tiến trình hoặc luồng mới), nhiệm vụ nặng nề có thể ảnh hưởng đến việc thực hiện các nhiệm vụ khác của tiến trình hiện tại, vì vậy tốt nhất là nên để các nhiệm vụ mất thời gian chạy trong tiến trình riêng biệt, chẳng hạn như tạo một/một số Worker tiến trình.

3、Khi tiến trình hiện tại không mở các coroutine swoole/swow, nếu tiến trình hiện tại bận rộn với các công việc khác hoặc khi một nhiệm vụ không hoàn thành trong thời gian dự kiến, và đến chu kỳ chạy tiếp theo, nó sẽ chờ cho nhiệm vụ hiện tại hoàn thành trước khi chạy. Điều này có thể dẫn đến bộ định thời không chạy theo khoảng thời gian dự kiến. Nói cách khác, tất cả các nghiệp vụ của tiến trình hiện tại đều được thực hiện tuần tự, nếu là đa tiến trình thì việc thực hiện nhiệm vụ giữa các tiến trình là song song.

4、Cần lưu ý rằng việc thiết lập nhiệm vụ định thời trong đa tiến trình có thể gây ra vấn đề đồng thời, ví dụ như đoạn mã dưới đây sẽ in ra 5 lần mỗi giây.

$worker = new Worker();
// 5 tiến trình
$worker->count = 5;
$worker->onWorkerStart = function(Worker $worker) {
    // 5 tiến trình, mỗi tiến trình đều có một bộ định thời như vậy
    Timer::add(1, function(){
        echo "hi\r\n";
    });
};
Worker::runAll();

Nếu chỉ muốn một tiến trình chạy bộ định thời, tham khảo Timer::add ví dụ 2

5、Có thể có sai số khoảng 1 mili giây.

6、Bộ định thời không thể bị xóa giữa các tiến trình, ví dụ như bộ định thời được thiết lập trong tiến trình a không thể bị gọi trực tiếp bằng interface Timer::del trong tiến trình b.

7、ID bộ định thời giữa các tiến trình khác nhau có thể bị trùng lặp, nhưng ID bộ định thời do cùng một tiến trình tạo ra sẽ không bị trùng lặp.

8、Việc thay đổi thời gian hệ thống sẽ ảnh hưởng đến hành vi của bộ định thời, vì vậy sau khi thay đổi thời gian hệ thống, nên khởi động lại.