Из-за задержки в сеть, я рекомендую следующую конструкцию для шахтеров:
1. getwork, запись <продолжительность запроса getwork> а также <время + getwork истекает> И начать добычу на нем
2. каждая вторая, обновление Ntime и сбросить временное значение для <первый одноразовый>
3. когда доля найден, представить его. записывать продолжительность запроса представить.
4. если представление доли терпит неудачу из-за ошибки сети, сохранить долю и повторить его через секунду так же, как шаг 3; также сразу (независимо от того, как долго текущей работы была активна) начинает пытаться получить новую работу (которую обрабатывают так же, как шаг 5 + 6, когда сделано)
5. когда текущее время прошло <Время @ 1 + getwork истекают> минус <продолжительность самого длинного getwork / представить, так как мы начали эту работу> раз 4, начните запрос на новую работу
6. когда приходит новая работа, выбросьте старую работу и начать использовать новую работу.
Если я понимаю правильно, а не ждать, пока точно не getwork истекает срок, вы получаете новую работу немного раньше, основываясь на том, как долго getwork / Направить запрос принимает? Так, например, если getwork занимает не более 5 секунд вы получите новую работу за 20 секунд до окончания срока действия текущей работы, чтобы избежать подач истекших акций.
А как насчет просто фиксированный процент или фиксированную продолжительность? Я мог бы беспокоиться, что эта схема может иметь непредсказуемые побочные эффекты. Если нагрузка на сервер увеличивает медлительность, это может быть самоукреплением, если это увеличивает вероятность того, что шахтеры будут решать, чтобы обновить свою работу. Что могло быть случайным образом распространены в течение долгого времени может стать концентрированными и пульсирующими. Я визуализируя песчаные дюны, но я не могу подключить его словами.