Có một số chủ đề trong ứng dụng của tôi hoạt động ở chế độ nền. Chúng kết nối với cơ sở dữ liệu và thực hiện một số truy vấn chọn thời gian. Trong hầu hết các trường hợp, các truy vấn này chỉ trả về một vài bản ghi. Theo thời gian, tuy nhiên, họ có thể trả lại hàng chục ngàn hồ sơ. Tất cả những điều này sau đó được xử lý trong một vòng lặp.Delphi - điều chỉnh thời gian ngủ của chủ đề
Vì tình huống như vậy có thể xảy ra trong một số chủ đề cùng một lúc, tôi không muốn ứng dụng của tôi sử dụng 100% thời gian CPU khi các luồng đó đang xử lý dữ liệu; tôi không muốn làm cho tất cả các chủ đề chiến đấu cho thời gian của bộ vi xử lý. Vì vậy, tôi gọi hàm Sleep() trong mỗi lần lặp của các vòng trong các luồng đó.
Tôi không biết, tuy nhiên, cách điều chỉnh thời gian ngủ. Tôi không muốn các vòng lặp kéo dài mãi mãi, vì vậy thời gian ngủ không thể quá dài. Tôi đặt nó đến 2 mili giây trong mỗi lần lặp (trong mỗi chủ đề) (tại sao 2ms? - đó là một câu hỏi hay :)).
Tôi nghĩ, mặt khác, tôi có thể kéo dài thời gian ngủ, nhưng chỉ gọi ngủ một lần mỗi lần lặp lại (giả sử, Ngủ (100) cứ 50 lần lặp lại). Tôi nên chọn phương pháp nào? Một vòng lặp của các vòng lặp mất khoảng 30 ms mỗi (không có bất kỳ giấc ngủ nào).
Vui lòng thông báo.
Cảm ơn!
Mariusz.
Nhưng nếu điều này chạy trên nền tảng trên một máy tính mà còn có ai đó làm việc trên (ví dụ như viết một bảng tính), bạn không muốn quá trình nền để làm cho quá trình nền trước không sử dụng được. – dummzeuch
Đúng, nhưng đó là lý do tại sao tôi viết rằng ưu tiên luồng nền có thể được hạ thấp, giữ cho các ứng dụng khác (hoặc chủ đề chính) đáp ứng trong khi vẫn sử dụng toàn bộ tiềm năng hệ thống. Trên các hệ thống (đa lõi) hiện đại, việc lưu trữ tất cả các lõi được tải đầy đủ là một vấn đề lớn hơn là thiếu sự đáp ứng của ứng dụng nền trước. Và I/O không được tối ưu hóa lớn là một mối đe dọa lớn hơn nhiều đối với khả năng sử dụng của một hệ thống hơn là tải CPU cao. – mghie