Tôi sẽ cung cấp cho bạn sự tương tự.
Hãy tưởng tượng hàng đợi tại nhà cung cấp đường phố nơi mọi người tham gia ở cuối dòng và được phân phát từ phía trước. Khi mỗi người được phục vụ, những người còn lại trong hàng đợi sẽ chuyển tiếp (thường lẩm bẩm về việc mất bao lâu) và những người mới tham gia vào cuối. Trong ví dụ này, mọi người phải di chuyển về phía trước để cho phép người khác tham gia vào dòng, nếu không thì kết thúc hàng đợi sẽ luôn đi xa hơn từ nhà cung cấp. Vì vậy, trong ví dụ này, máy chủ ở phía trước hàng đợi và giao dịch với bất kỳ ai ở phía trước hoặc không có ai.
Bây giờ hãy tưởng tượng nếu mọi người không di chuyển nhưng thay vì sau khi phục vụ người đứng đầu hàng đợi, người bán tự di chuyển xa hơn dọc theo hàng đợi, có hiệu lực di chuyển đến nơi người đứng đầu hàng đợi. Cuối cùng sau khi phục vụ 100 người máy chủ là nửa chừng xuống đường và sau 500 máy chủ bây giờ là ở đường phố tiếp theo, vv ... nó dừng ở đâu? Vì vậy, để thuận tiện cho người bán bản đồ một khu vực circuital lớn, nơi mọi người luôn có thể tham gia vào cuối hàng đợi và ông luôn luôn di chuyển đến người tiếp theo, nhưng hàng đợi vẫn ở một nơi. Anh ta chỉ đi vòng quanh hàng đợi phục vụ mọi người. Chắc chắn anh ta chỉ có thể phục vụ mọi người trong hàng đợi, nhưng với điều kiện anh ta đủ lớn để anh ta có thể theo kịp nhu cầu, và anh ta không phải rời khỏi khu vực bán hàng được chỉ định của mình.
Thực hiện tương tự ngược về máy tính ... trong ví dụ trước tiên có trình quản lý hàng đợi và khi các mục được bảo dưỡng, nó sẽ xáo trộn các mục dọc theo bộ đệm. Trong ví dụ giây thứ hai chương trình chạy cho đến khi không còn bộ nhớ nào để thêm vào mảng = đó là kích thước cố định (được xác định hoặc bị giới hạn bởi không gian).Trong ví dụ thứ ba, máy chủ di chuyển đến đầu hàng đợi như hàng đợi thứ hai nhưng mảng được cố định và chỉ có nhiều mục có thể tham gia hàng đợi, nhưng chúng vẫn sẽ nhận được dịch vụ FIFO.
tl; dr: Quản lý tài nguyên hiệu quả.
Nguồn
2012-10-05 23:24:35
Tôi nghĩ rằng ngay cả với các khe không giới hạn vẫn hữu ích khi sử dụng lại những thứ bạn có theo cách tròn. –
Trong một kịch bản không giới hạn, tôi sẽ giải phóng bộ nhớ trên một 'get()' và phân bổ bộ nhớ mới trên một 'add()'. Vì vậy, tôi tái sử dụng các khe nhưng không phải là một thứ tự cố định. – Simulant
Tôi nghĩ rằng Simulant đang đề cập đến một Hàng đợi được hỗ trợ bởi một cấu trúc dữ liệu động như một LinkedList. Trong những trường hợp đó, nó không có ý nghĩa để "sử dụng lại các khe" vì không có khe, chỉ "các liên kết giữ" có thể được tạo ra và loại bỏ rẻ. Trên thực tế, nói chung, cố gắng tái sử dụng quá mức các đối tượng được xây dựng rẻ tiền có thể dẫn đến các vấn đề hiệu suất bằng cách cho phép các đối tượng di chuyển vào một phân loại không gian heap nơi chúng không thuộc về. –