Hướng dẫn does php sleep use cpu? - ngủ php có sử dụng cpu không?

Tôi đang chạy một kịch bản CLI mà chủ yếu ngủ. Cứ sau 10 giây, tập lệnh sẽ thực hiện một cái gì đó. Vấn đề là, kịch bản đang ngồi ở mức sử dụng CPU 94% trong khi ngủ.

Cách tôi thiết lập nó là:

while(1){
    sleep(10);
    doStuff();
}

Trong khi điều này hoạt động như dự định, có một vấn đề rõ ràng. Trong C ++/Java, tôi chỉ có thể đặt một bộ đếm thời gian để loại bỏ vấn đề vòng lặp. Ngoài ra, tôi đã hy vọng tôi sẽ không cần công việc cron.

Có cách nào thay thế để làm điều này không?


Cập nhật

Rõ ràng kịch bản gốc của tôi (khá lớn) không bao giờ thực sự vào chế độ ngủ, vì vậy, trong khi vòng lặp chạy các chu kỳ CPU không bị hỏng và đốt cháy. Đối với bất cứ ai có cùng một vấn đề, hãy chắc chắn rằng đó không phải là trường hợp với bạn!

Hướng dẫn does php sleep use cpu? - ngủ php có sử dụng cpu không?

Hỏi ngày 12 tháng 9 năm 2012 lúc 2:38Sep 12, 2012 at 2:38

2

Kịch bản của tôi đã được thiết lập một cái gì đó như thế này:

define('THREAD_SLEEP', 10); // Sleep time
$sleep = false; // Skips the first sleep

while(1){
    if($sleep){
        sleep(THREAD_SLEEP);
    }

    $sleep = true; // By default, the script enters sleep mode each loop.

    if(doSomethingAndHaveMoreToDo()){
        $sleep = false; // If more stuff to do, remove sleep and keep doing it.
    }
}

Vấn đề là, tập lệnh liên tục cài đặt $sleep thành false, điều đó có nghĩa là nó không bao giờ vào chế độ ngủ và sử dụng gần 100% CPU.

Đã trả lời ngày 12 tháng 9 năm 2012 lúc 3:06Sep 12, 2012 at 3:06

biệt danhnick

2.6434 huy hiệu vàng28 Huy hiệu bạc39 Huy hiệu đồng4 gold badges28 silver badges39 bronze badges

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách sử dụng chức năng ngủ hoặc ngủ trong PHP để tạm dừng tập lệnh.

Hướng dẫn does php sleep use cpu? - ngủ php có sử dụng cpu không?

Khi viết các tập lệnh PHP của bạn, có thể có những lúc bạn cảm thấy như bạn sẽ muốn tạm dừng/ngủ tập lệnh.

Việc tạm dừng việc thực hiện một kịch bản là hữu ích trong các tình huống khác nhau. Một ví dụ về việc sử dụng là khi thực hiện một số lượng lớn các yêu cầu mạng, bạn có thể muốn ngủ tập lệnh PHP của mình để ngăn chặn nó tràn vào mạng.

Bạn cũng có thể sử dụng nó để ngăn chặn một kịch bản tiêu thụ một lượng tài nguyên CPU bất thường. Sử dụng chức năng giấc ngủ giữa các tác vụ có thể dừng hoàn thành nhanh chóng các tác phẩm nhanh chóng áp đảo CPU.

Hai cách chính mà bạn có thể ngủ một tập lệnh trong PHP là sử dụng các bản ____ ____1010 hoặc ____ ____11. Trong các phần sau, chúng tôi sẽ bao gồm cả hai phần này.

Một lời giải thích nhanh giữa những điều này là chức năng của ____ ____10, hoạt động trong vài giây và hoạt động của ____ ____11.

Hàm php ngủ ()

Sử dụng chức năng ngủ PHP, có thể tạm dừng việc thực thi tập lệnh trong một số giây được chỉ định.

Hàm chỉ có một tham số duy nhất có tên là ____ ____14, trong đó bạn đặt thời gian ngủ trong cả giây.

Dưới đây bạn có thể thấy định nghĩa cho hàm

define('THREAD_SLEEP', 10); // Sleep time
$sleep = false; // Skips the first sleep

while(1){
    if($sleep){
        sleep(THREAD_SLEEP);
    }

    $sleep = true; // By default, the script enters sleep mode each loop.

    if(doSomethingAndHaveMoreToDo()){
        $sleep = false; // If more stuff to do, remove sleep and keep doing it.
    }
}
0 trong PHP. Bạn có thể thấy tham số của nó được lấy dưới dạng số nguyên và nó trả về một số nguyên.

Hàm giấc ngủ () sẽ trả về 0 (

define('THREAD_SLEEP', 10); // Sleep time
$sleep = false; // Skips the first sleep

while(1){
    if($sleep){
        sleep(THREAD_SLEEP);
    }

    $sleep = true; // By default, the script enters sleep mode each loop.

    if(doSomethingAndHaveMoreToDo()){
        $sleep = false; // If more stuff to do, remove sleep and keep doing it.
    }
}
6) khi nó ngủ thành công. Tuy nhiên, nếu giấc ngủ của tập lệnh không thành công, nó sẽ trả lại Boolean false.

Vì chức năng này có thể trả về

define('THREAD_SLEEP', 10); // Sleep time
$sleep = false; // Skips the first sleep

while(1){
    if($sleep){
        sleep(THREAD_SLEEP);
    }

    $sleep = true; // By default, the script enters sleep mode each loop.

    if(doSomethingAndHaveMoreToDo()){
        $sleep = false; // If more stuff to do, remove sleep and keep doing it.
    }
}
6 hoặc false, hãy đảm bảo bạn sử dụng toán tử giống hệt Php (
0) khi kiểm tra giá trị trả về. Nếu không, trò tung hứng loại PHP sẽ coi 0 và sai là như nhau.

Xin lưu ý rằng giây không thể là một phần của giây. Nếu bạn cần một phần nhỏ của một giây, hãy sử dụng hàm

1. that the seconds can not be a fraction of a second. If you need a fraction of a second, use the 
1 function.

Ví dụ về việc sử dụng hàm Sleep () trong PHP

Bây giờ chúng ta đã biết cú pháp của hàm Sleep (), hãy để chúng tôi viết tập lệnh PHP nhanh để bạn có thể thấy nó hoạt động như thế nào.

Chúng tôi sẽ sử dụng chức năng Echo Php, để in thời gian hiện tại cho ví dụ này. Chúng ta có thể lấy thời gian hiện tại nhờ hàm

2. Sử dụng tùy chọn ____ ____23, sẽ nhận được giờ, phút và thứ hai hiện tại.

Chúng tôi bắt đầu bằng cách in chuỗi chuỗi ____ ____24, kết hợp thời gian hiện tại và cuối cùng là ký tự dòng mới (

5).

Sau đó, chúng tôi sử dụng Php từ

6function để sử dụng, cài đặt tham số duy nhất của nó thành ____ ____27, để ngủ tập lệnh trong 5 giây.5 seconds.

Cuối cùng, để cho bạn thấy kịch bản có giấc ngủ, chúng tôi in văn bản ____ ____28, kết hợp thời gian hiện tại.

Sau khi chạy tập lệnh này, bạn sẽ thấy kết quả tương tự như những gì chúng tôi đã hiển thị dưới đây.

Với sự khác biệt về thời gian, bạn có thể thấy chức năng giấc ngủ tạm dừng việc thực hiện tập lệnh.

Hàm us ngủ () trong PHP

Nếu bạn cần tạm dừng việc thực thi tập lệnh PHP của mình trong thời gian ngắn hơn một giây, bạn sẽ cần sử dụng hàm usleep ().

Với chức năng này, bạn có thể chỉ định số lượng micro giây mà bạn muốn tập lệnh ngủ. Một micro giây là một triệu giây.

Ví dụ: nếu bạn muốn ngủ tập lệnh PHP của mình trong một phần tư giây (

9), bạn sẽ sử dụng giá trị 
0.

Dưới đây, bạn có thể thấy định nghĩa cho hàm us ngủ () trong PHP. Nó có một tham số duy nhất phải luôn là một số nguyên và nó trả về một số nguyên.

Giống như chức năng giấc ngủ,

1 sẽ trở lại 
define('THREAD_SLEEP', 10); // Sleep time
$sleep = false; // Skips the first sleep

while(1){
    if($sleep){
        sleep(THREAD_SLEEP);
    }

    $sleep = true; // By default, the script enters sleep mode each loop.

    if(doSomethingAndHaveMoreToDo()){
        $sleep = false; // If more stuff to do, remove sleep and keep doing it.
    }
}
6 khi nó ngủ thành công. Tuy nhiên, nếu chức năng không ngủ trong toàn bộ thời gian, nó sẽ trả lại false.

Xin lưu ý rằng việc sử dụng micro ngủ lâu hơn so với ____ ____34 (1 giây) có thể không được hệ thống máy chủ hỗ trợ. that using micro sleeps longer than “

4” (1 second) may not be supported by the host system.

Ví dụ về việc sử dụng hàm us ngủ ()

Trong ví dụ này, chúng tôi sẽ sử dụng hàm php từ us ngủ () để ngủ tập lệnh của chúng tôi trong 250000 micro giây (một phần tư giây).

Chúng tôi sẽ cần sử dụng thời gian được cung cấp bởi chức năng của ____ ____35 để theo dõi điều này. Điều này cung cấp cho chúng tôi dấu thời gian UNIX hiện tại tính bằng micro giây.

Bắt đầu tập lệnh bằng cách nhận thời gian vi mô hiện tại và lưu trữ nó trong biến ____ ____36.

Sau đó, chúng ta có thể sử dụng chức năng

define('THREAD_SLEEP', 10); // Sleep time
$sleep = false; // Skips the first sleep

while(1){
    if($sleep){
        sleep(THREAD_SLEEP);
    }

    $sleep = true; // By default, the script enters sleep mode each loop.

    if(doSomethingAndHaveMoreToDo()){
        $sleep = false; // If more stuff to do, remove sleep and keep doing it.
    }
}
1, chuyển vào
0 để ngủ tập lệnh cho 
0 micro giây.

Sau khi ngủ, chúng tôi sẽ lấy lại thời gian vi mô và lưu trữ nó trong biến ____ ____40.

Sau đó, chúng tôi tính toán tổng thời gian thực hiện bằng cách trừ thời gian bắt đầu từ thời gian kết thúc và lưu trữ nó trong biến ____ ____41.

Cuối cùng, chúng tôi sử dụng chức năng Echo để xuất số lượng tập lệnh mất bao lâu để chạy. Điều này sẽ cho chúng ta thấy kịch bản của chúng ta ngủ như thế nào trong quá trình thực hiện.

Dưới đây là một ví dụ về những gì PHP sẽ in sau khi chạy ví dụ trên.

Bạn sẽ nhận thấy rằng thời gian trở lại là chính xác thời gian ngủ, vì các chức năng không hoàn thành ngay lập tức.

Sự kết luận

Trong suốt hướng dẫn này, chúng tôi đã chỉ cho bạn hai cách mà bạn có thể tạm dừng việc thực hiện tập lệnh PHP của bạn.

Hai chức năng chúng tôi đã khám phá trong hướng dẫn này là các chức năng của PHP ____ và

define('THREAD_SLEEP', 10); // Sleep time
$sleep = false; // Skips the first sleep

while(1){
    if($sleep){
        sleep(THREAD_SLEEP);
    }

    $sleep = true; // By default, the script enters sleep mode each loop.

    if(doSomethingAndHaveMoreToDo()){
        $sleep = false; // If more stuff to do, remove sleep and keep doing it.
    }
}
1. Cả hai đều có cách sử dụng cụ thể của họ nhưng sẽ tạm dừng việc thực thi tập lệnh.

Vui lòng bình luận bên dưới nếu bạn có bất kỳ câu hỏi nào về việc sử dụng các chức năng ngủ và ngủ trong PHP.

Hãy chắc chắn kiểm tra các hướng dẫn PHP khác của chúng tôi và các hướng dẫn mã hóa của chúng tôi.

Cập nhật hàng tuần thẳng vào hộp thư đến của bạn

Nhận các dự án Raspberry Pi của chúng tôi, hướng dẫn mã hóa, hướng dẫn Linux và nhiều hơn nữa!

Ngủ có sử dụng CPU không?

Các quy trình không tiêu thụ tài nguyên CPU trong khi họ đang ngủ.Họ có thể thêm một số chi phí vì hạt nhân phải tung hứng chúng xung quanh, nhưng điều đó rất không đáng kể.. They may add some overhead since the Kernel has to juggle them around, but that is very insignificant.

Giấc ngủ hoạt động như thế nào trong PHP?

Hàm giấc ngủ () trì hoãn việc thực thi tập lệnh hiện tại trong một số giây được chỉ định.Lưu ý: Hàm này ném lỗi nếu số giây được chỉ định là âm.delays execution of the current script for a specified number of seconds. Note: This function throws an error if the specified number of seconds is negative.

Sự khác biệt giữa US ngủ và giấc ngủ là gì?

Có thể sử dụng giấc ngủ như một danh từ và như một động từ.Ví dụ: "Anh ấy đang ngủ." “Asleep” is an adjective, so that means these words take different positions in sentences. For example: “He's sleeping.”

Mục đích của us ngủ () trong thời gian 1 vòng là gì?

Mô tả: Hàm us ngủ () đình chỉ luồng gọi cho đến khi các micro giây của thời gian thực đã trôi qua hoặc cho đến khi tín hiệu không bị bỏ qua.suspends the calling thread until useconds microseconds of realtime have elapsed, or until a signal that isn't ignored is received.