Tôi đã nghe cụm từ đó rất nhiều. Nó có nghĩa là gì?
Một ví dụ sẽ hữu ích.
Tôi đã nghe cụm từ đó rất nhiều. Nó có nghĩa là gì?
Một ví dụ sẽ hữu ích.
Câu trả lời:
Từ Wiktionary :
Đối với trường hợp 1, nó có thể giống như
for (unsigned int i = 0; i < 0xffffffff; ++ i) {}
while (condition == false) {}
là một ví dụ tốt hơn?
Tôi nghĩ rằng cụm từ này thường được sử dụng để chỉ định một vòng lặp lặp lại nhiều lần và có thể có ảnh hưởng nghiêm trọng đến hiệu suất của chương trình - nghĩa là nó có thể sử dụng nhiều chu kỳ CPU. Thông thường bạn sẽ nghe thấy cụm từ này trong một cuộc thảo luận về tối ưu hóa.
Ví dụ, tôi nghĩ đến trò chơi, trong đó một vòng lặp có thể cần xử lý mọi pixel trên màn hình hoặc ứng dụng khoa học, nơi một vòng lặp đang xử lý các mục nhập trong các mảng điểm dữ liệu khổng lồ.
Có một ví dụ điển hình về một vòng lặp chặt chẽ (~ vòng lặp vô hạn) trong video Jon Skeet và Tony the Pony .
Ví dụ là:
while(text.IndexOf(" ") != -1) text = text.Replace(" ", " ");
điều này tạo ra một vòng lặp chặt chẽ vì IndexOf
bỏ qua một ký tự có độ rộng bằng không Unicode (do đó tìm thấy hai khoảng trắng liền kề) nhưng Replace
không bỏ qua chúng (do đó không thay thế bất kỳ khoảng trắng liền kề nào).
Đã có những định nghĩa tốt trong các câu trả lời khác, vì vậy tôi không đề cập lại.
Câu trả lời của SandeepJ là câu trả lời đúng trong ngữ cảnh của Thiết bị mạng (ví dụ: xem mục nhập Wikipedia trên hộp trung gian) xử lý các gói tin. Tôi muốn nói thêm rằng luồng / tác vụ đang chạy vòng lặp chặt chẽ sẽ cố gắng duy trì lịch trình trên một CPU duy nhất và không bị tắt ngữ cảnh.
Theo từ điển của Webster, "Một vòng lặp mã thực thi mà không giải phóng bất kỳ tài nguyên nào cho các chương trình khác hoặc hệ điều hành."
http://www.websters-online-dictionary.org/ti/tight+loop.html
Từ kinh nghiệm, tôi nhận thấy rằng nếu bạn đang cố gắng thực hiện một vòng lặp chạy vô thời hạn, chẳng hạn như:
while(true)
{
//do some processing
}
Một vòng lặp như vậy rất có thể sẽ luôn sử dụng nhiều tài nguyên. Nếu bạn kiểm tra mức sử dụng CPU và Bộ nhớ trong quá trình với vòng lặp này, bạn sẽ thấy rằng nó sẽ tăng vọt. Đó là ý tưởng mà một số người gọi là "vòng lặp chặt chẽ".
Nhiều môi trường lập trình ngày nay không cho lập trình viên gặp các điều kiện cần vòng lặp chặt chẽ, ví dụ như các dịch vụ web Java chạy trong một vùng chứa gọi mã của bạn và bạn cần giảm thiểu / loại bỏ các vòng lặp trong quá trình triển khai servlet. Các hệ thống như Node.js xử lý vòng lặp chặt chẽ và một lần nữa bạn nên giảm thiểu / loại bỏ các vòng lặp trong mã của riêng bạn. Chúng được sử dụng trong các trường hợp bạn có toàn quyền kiểm soát việc thực thi chương trình, ví dụ như hệ điều hành hoặc môi trường thời gian thực / nhúng. Trong trường hợp của một hệ điều hành, bạn có thể nghĩ rằng CPU đang ở trạng thái nhàn rỗi là lượng thời gian nó dành cho vòng lặp chặt chẽ vì vòng lặp chặt chẽ là nơi nó thực hiện kiểm tra xem các quy trình khác có cần chạy hay không. là các hàng đợi cần được phục vụ, vì vậy nếu không có tiến trình nào cần chạy và hàng đợi trống thì CPU chỉ quay vòng vòng và điều này tạo ra một chỉ báo tùy chọn về mức độ 'không bận rộn' của CPU. Một vòng lặp chặt chẽ nên được thiết kế như chỉ thực hiện kiểm tra để nó giống như một danh sách lớn các câu lệnh if .. then, vì vậy trong Assembly, nó sẽ chuyển thành toán hạng SO SÁNH và sau đó là một nhánh nên nó rất hiệu quả. Khi tất cả các lần kiểm tra dẫn đến không phân nhánh, vòng lặp chặt chẽ có thể thực thi hàng triệu lần mỗi giây. Hệ điều hành / hệ thống nhúng thường có một số phát hiện đối với sự cố CPU để xử lý các trường hợp trong đó một số quy trình không từ bỏ quyền kiểm soát CPU - việc kiểm tra loại sự cố này có thể được thực hiện trong vòng lặp chặt chẽ. Cuối cùng, bạn cần hiểu rằng một chương trình cần phải có một vòng lặp tại một thời điểm nào đó, nếu không, bạn không thể làm bất cứ điều gì hữu ích với CPU, vì vậy nếu bạn không bao giờ thấy cần phải có vòng lặp, đó là vì môi trường của bạn xử lý tất cả những điều đó cho bạn. CPU tiếp tục thực hiện các lệnh cho đến khi không còn gì để thực thi hoặc bạn gặp sự cố, vì vậy một chương trình như HĐH phải có một vòng lặp chặt chẽ để thực sự hoạt động nếu không nó sẽ chạy chỉ trong micro giây. Cuối cùng, bạn cần hiểu rằng một chương trình cần phải có một vòng lặp tại một thời điểm nào đó, nếu không, bạn không thể làm bất cứ điều gì hữu ích với CPU, vì vậy nếu bạn không bao giờ thấy cần phải có vòng lặp, đó là vì môi trường của bạn xử lý tất cả những điều đó cho bạn. CPU tiếp tục thực hiện các lệnh cho đến khi không còn gì để thực thi hoặc bạn gặp sự cố, vì vậy một chương trình như HĐH phải có một vòng lặp chặt chẽ để thực sự hoạt động, nếu không, nó sẽ chạy chỉ trong micro giây. Cuối cùng, bạn cần hiểu rằng một chương trình cần phải có một vòng lặp tại một thời điểm nào đó, nếu không, bạn không thể làm bất cứ điều gì hữu ích với CPU, vì vậy nếu bạn không bao giờ thấy cần phải có vòng lặp, đó là vì môi trường của bạn xử lý tất cả những điều đó cho bạn. CPU tiếp tục thực hiện các lệnh cho đến khi không còn gì để thực thi hoặc bạn gặp sự cố, vì vậy một chương trình như HĐH phải có một vòng lặp chặt chẽ để thực sự hoạt động nếu không nó sẽ chạy chỉ trong micro giây.