7

Khi mã đang chờ một số điều kiện trong đó thời gian trễ không xác định, có vẻ như nhiều người chọn sử dụng backoff theo hàm mũ, tức là đợi N giây, kiểm tra xem điều kiện có đáp ứng hay không; nếu không, chờ 2N giây, kiểm tra điều kiện, vv Lợi ích của việc kiểm tra này trong khoảng thời gian tăng liên tục/tuyến tính là gì?Lợi ích của việc sử dụng backoff theo hàm mũ là gì?

+2

Điều này có vẻ khá off-topic cho StackOverflow. Lợi ích là tăng số lần chậm trễ theo cấp số nhân sẽ dẫn đến tổng số séc nhỏ hơn nhiều. Điều này cải thiện hiệu suất rất nhiều nếu một kiểm tra đòi hỏi rất nhiều sức mạnh xử lý, hoặc băng thông internet. – Cristy

+0

Tại sao nó sẽ là off-topic? Tôi không nhất thiết không đồng ý, nhưng không có lời giải thích nào được đưa ra. Tôi cho một người tìm thấy câu hỏi và câu trả lời hữu ích. – filmil

Trả lời

3

Đây là hành vi của kiểm soát tắc nghẽn TCP. Nếu mạng là cực kỳ tắc nghẽn, hiệu quả không có lưu lượng truy cập được thông qua. Nếu mỗi nút đợi một thời gian liên tục trước khi kiểm tra, lưu lượng truy cập chỉ để kiểm tra sẽ tiếp tục làm tắc nghẽn mạng và tắc nghẽn không bao giờ giải quyết được. Tương tự như vậy đối với thời gian tăng tuyến tính giữa các lần kiểm tra, có thể mất một thời gian dài trước khi tắc nghẽn được giải quyết.

2

Trả về theo hàm mũ là hữu ích trong trường hợp các nỗ lực đồng thời làm điều gì đó sẽ ảnh hưởng lẫn nhau sao cho không không thành công nào. Trong những trường hợp như vậy, việc có các thiết bị ngẫu nhiên thử một thao tác trong một cửa sổ quá nhỏ sẽ dẫn đến hầu hết các lần thử thất bại và phải được thử lại. Chỉ một khi cửa sổ đã phát triển đủ lớn thì nỗ lực sẽ có khả năng thành công đáng kể.

Nếu bạn biết trước rằng 16 thiết bị sẽ muốn giao tiếp, người ta có thể chọn kích thước cửa sổ sẽ tối ưu cho mức tải đó. Trong thực tế, mặc dù, số lượng các thiết bị cạnh tranh thường không rõ. Ưu điểm của một mũ back-off nơi kích thước cửa sổ đôi trên mỗi retry là không phụ thuộc vào số lượng các đơn vị cạnh tranh:

  1. Cửa sổ kích thước nơi mà hầu hết các hoạt động thành công thường sẽ nằm trong một yếu tố của hai kích thước cửa sổ nhỏ nhất, nơi hầu hết các hoạt động sẽ thành công,

  2. Hầu hết các hoạt động thất bại ở kích thước cửa sổ đó sẽ thành công trong lần thử tiếp theo (vì hầu hết các hoạt động trước đó sẽ thành công, sẽ để lại ít hơn một nửa họ cạnh tranh cho một cửa sổ lớn gấp đôi) và

  3. Tổng thời gian cần thiết cho tất cả các lần thử sẽ chỉ kết thúc gấp đôi số lần yêu cầu cho lần cuối cùng.

Nếu, thay vì tăng gấp đôi mỗi lần, cửa sổ đơn giản tăng lên một lượng không đổi, thì thời gian thử lại cho đến khi cửa sổ đạt đến kích thước có thể sử dụng sẽ tỷ lệ với bình phương của bất kỳ kích thước cửa sổ nào được yêu cầu . Mặc dù kích thước cửa sổ cuối cùng có thể nhỏ hơn so với kích thước theo cấp số nhân, tổng chi phí của tất cả các lần thử sẽ lớn hơn nhiều.

1

Giả sử bạn đang đề cập đến kiểm tra một điều kiện trước khi thực hiện một hành động:

  • backoff Exponential là có lợi khi chi phí kiểm tra điều kiện là tương đương với chi phí thực hiện các hành động (chẳng hạn như trong tình trạng tắc nghẽn mạng) .
  • nếu chi phí kiểm tra điều kiện nhỏ hơn nhiều (hoặc không đáng kể), thì chờ đợi tuyến tính hoặc liên tục có thể hoạt động tốt hơn, miễn là thời gian cần để điều kiện thay đổi cũng không đáng kể.

Ví dụ, nếu điều kiện của bạn là truy vấn phức tạp (chậm) đối với cơ sở dữ liệu và hành động là cập nhật cơ sở dữ liệu, thì mọi kiểm tra sẽ ảnh hưởng tiêu cực đến hiệu suất cơ sở dữ liệu. điểm, mà không có backoff mũ, kiểm tra tình trạng của nhiều diễn viên có thể là đủ để sử dụng tất cả các tài nguyên cơ sở dữ liệu.

Nhưng nếu điều kiện chỉ là kiểm tra bộ nhớ nhẹ (phần quan trọng) và hành động vẫn là bản cập nhật cơ sở dữ liệu (tối đa hàng chục nghìn lần chậm hơn kiểm tra) và nếu điều kiện là lộn trong một thời gian không đáng kể vào lúc bắt đầu của hành động (bằng cách nhập phần quan trọng), sau đó một backoff liên tục hoặc tuyến tính sẽ là tốt. Trên thực tế theo kịch bản cụ thể này, một hậu trường mũ sẽ gây bất lợi vì nó sẽ giới thiệu sự chậm trễ trong các tình huống tải thấp và có nhiều khả năng dẫn đến thời gian chờ trong các trường hợp tải cao (ngay cả khi băng thông xử lý đủ).

Vì vậy, để tóm tắt, backon mũ là một cái búa: nó hoạt động tuyệt vời cho móng tay, không quá nhiều cho vít :)

Các vấn đề liên quan