Что не так с опросом?

34
задан Peter Mortensen 10 November 2010 в 20:09
поделиться

15 ответов

Опрос не "неправильно" как таков.

Много зависит от того, как это реализовано и для какой цель. Если Вы действительно заботитесь о immedatly уведомлении об изменении, это очень эффективно. Ваш код находится в жестком цикле, постоянно опрашивая (выяснение) у ресурса, изменилось ли это / обновленный. Это означает, что Вы уведомляетесь, как только можно быть то, что что-то отличается. Но, Ваш код не делает ничего больше и существуют издержки с точки зрения многих много вызовов к рассматриваемому объекту.

, Если Вы менее обеспокоены в немедленном оповещении, что можно увеличить интервал между опросами, и это может также работать хорошо, но выбор корректного интервала может быть трудным. Слишком долго и Вы могли бы пропустить критические изменения, слишком короткие, и Вы вернулись к проблемам первого метода.

Альтернативы, такие как прерывания или сообщения, и т.д. могут обеспечить лучший компромисс в этих ситуациях. Вы уведомляетесь относительно изменения, как только практически возможно, но эта задержка не что-то, чем Вы управляете, она зависит от компонента tself быть своевременным о передаче изменений в состоянии.

, Что является "неправильным" с опросом?

  • Это может быть ресурс hogging.
  • Это может ограничивать (особенно, если у Вас есть много вещей, Вы хотите знать о / опрос).
  • Это может быть излишество.

, Но...

  • Это не по сути неправильно.
  • Это может быть очень эффективно.
  • Это очень просто.
42
ответ дан Peter Mortensen 27 November 2019 в 15:55
поделиться

Как со всем, это зависит. Большая система высокой транзакции я продолжаю работать в настоящее время, использует уведомление с SQL (DLL, загруженный в SQL Server, который называет расширенный SP от, включает определенные таблицы. DLL тогда уведомляет другие приложения, что существует работа, чтобы сделать).

Однако мы переезжаем от этого, потому что мы можем практически гарантировать, что будет работа для делания непрерывно. Поэтому, чтобы уменьшить сложность и на самом деле ускорить вещи немного, приложения обработают свою работу и сразу опросят DB снова относительно новой работы. Не должен там быть ни один, что это попробует еще раз после маленького интервала.

Это, кажется, работает более быстрое и намного более просто. Однако другая часть приложения, которое является большим количеством пониженной громкости, не извлекает выгоду из увеличения скорости с помощью этого метода - если интервал опроса не является очень маленьким, который приводит к проблемам производительности. Таким образом, мы оставляем его, как для этой части. Поэтому это - хорошая вещь, когда это является соответствующим, но общие потребности отличаются.

1
ответ дан Valerion 27 November 2019 в 15:55
поделиться

Я соглашаюсь, что предотвращение опроса является хорошей политикой. Однако В отношении сообщение Robert , я сказал бы, что простота опроса может сделать его лучшим подходом в экземплярах, где проблемами, упомянутыми здесь, не является такая большая проблема, поскольку асинхронный подход часто значительно менее читаем и более труден поддержать, не говоря уже об ошибках, которые могут закрасться к его реализации.

1
ответ дан Community 27 November 2019 в 15:55
поделиться

Это не отвечает на Ваш вопрос. Но реалистично, особенно в этот "день и возраст" то, где циклы процессора являются дешевыми, и пропускная способность, является большим, опрос является на самом деле довольно хорошим решением для некоторых задач.

преимущества:

  • Дешевый
  • Надежный
  • Тестируемый
  • Гибкий
1
ответ дан Ali Afshar 27 November 2019 в 15:55
поделиться

Я вижу много ответов здесь, но я думаю, что самый простой ответ является ответом это сам:

, поскольку (обычно) намного более просто кодировать цикл опроса, чем сделать инфраструктуру для обратных вызовов.

Затем Вы получаете более простой код, который, если это оказывается узким местом позже, может быть понятным и перепроектировал/осуществил рефакторинг во что-то еще.

2
ответ дан Ismael C 27 November 2019 в 15:55
поделиться

Вещь об опросе состоит в том, что он работает! Его надежное и простое для реализации.

затраты на объединение могут быть высокими - при сканировании базы данных для изменений каждую минуту, когда существует только два изменения в день, Вы используете много ресурсов для очень маленького результата.

Однако проблема с любым уведомлением technoligy состоит в том, что они намного более сложны для реализации и мало того, что они могут быть ненадежными, но и (и это - большое, НО), Вы не можете легко сказать, когда они не работают.

Поэтому, если Вы действительно отбрасываете опрос для некоторого другого technoligy, удостоверяются, что это применимо средними программистами и крайнее надежный.

2
ответ дан James Anderson 27 November 2019 в 15:55
поделиться

Я иногда использую опрос для определенных ситуаций (например, в игре, я опросил бы клавиатуру, указывает каждый кадр), но никогда в цикле, который ТОЛЬКО делает опрос, скорее я сделал бы опрос как проверку (имеет ресурс X измененный? Если да, сделайте что-то, иначе обработайте что-то еще и проверьте снова позже). Вообще говоря, хотя, я стараюсь не опрашивать в пользу асинхронных уведомлений.

причины, являющиеся этим, я не трачу ресурсы (процессорное время, безотносительно) ожидающий, что что-то произойдет (особенно, если те ресурсы могли бы ускорить ту вещь, происходящую во-первых). Случаи, где я использую опрос, я не сижу сложа руки, ожидая, я использую ресурсы в другом месте, таким образом, это - надуманный вопрос (для меня, по крайней мере).

3
ответ дан Peter Mortensen 27 November 2019 в 15:55
поделиться

Его простое - опрос плох - неэффективный, трата ресурсов, и т.д. всегда существует некоторая форма возможности соединения на месте, которая контролирует для какого-то события так или иначе, даже если 'опрос' не выбран.

Итак, почему идут дополнительная миля и помещают дополнительный опрос на месте.

Обратные вызовы являются наилучшим вариантом - просто должен волноваться о, согласуются обратный вызов в Вашем текущем процессе. Базовый, там опрашивает продолжение видеть, что соединение все еще на месте во всяком случае.

, Если Вы продолжаете звонить/звонить своей девушке и она никогда не ответы, тогда почему продолжают звонить? Просто оставьте сообщение и ожидайте, пока она не 'перезвонит';)

3
ответ дан 27 November 2019 в 15:55
поделиться

Я думаю, что люди должны понять, что в большинстве случаев, на некотором уровне там опрашивает быть сделанным, даже в событии или управляемых прерыванием ситуациях, но Вы изолируетесь от фактического кода, делающего опрос. Действительно, это - самая желательная ситуация... изолируют себя от implementaion, и просто имеют дело с событием. Даже если необходимо реализовать опрос себя, запишите код так, чтобы это было изолировано, и с результатами имеют дело независимо от реализации.

5
ответ дан Nerdfest 27 November 2019 в 15:55
поделиться

Опрос легко сделать, очень легкий, его столь же легкий как любой процессуальный кодекс. Не опрос означает ввод мира Асинхронного программирования которое не является как до полусмерти легко, и могло бы даже стать сложным время от времени.

И как со всем в любой системе, путь меньшего сопротивления обычно чаще всего берется, таким образом, всегда будут программисты, использующие опрос, даже великих программистов, потому что иногда нет никакой потребности усложнить вещи с асинхронными шаблонами.

я для каждый всегда процветает, чтобы не опрашивать, но иногда я делаю опрос так или иначе, особенно когда фактические усиления асинхронной обработки не являются настолько большими, такой, действуя против некоторых маленьких локальных данных (конечно, Вы становитесь немного быстрее, но пользователи не заметят различия в случае как это). Таким образом, существует комната для обеих методологий, по моему скромному мнению.

15
ответ дан Robert Gould 27 November 2019 в 15:55
поделиться

Примеры вещей, которые используют опрос в этот день и возраст:

  • Почтовые клиенты опрашивают относительно новых сообщений (даже с IMAP).
  • RSS-ридеры опрашивают относительно изменений в подаче.
  • Поисковые системы опрашивают относительно изменений в страницах, которые они индексируют.
  • пользователи StackOverflow опрашивают относительно новых вопросов путем удара 'обновления';-)
  • клиенты Bittorrent опрашивают средство отслеживания (и друг друга, я думаю с DHT) для изменений в рое.
  • Спин-блокировки в многоядерных системах могут быть самой эффективной синхронизацией между ядрами в случаях, где задержка слишком коротка для там, чтобы быть пора запланировать другой поток на это ядро, прежде чем другое ядро сделает то, чего мы ожидаем.

Иногда просто нет никакого способа получить асинхронные уведомления: например, для замены RSS системой нажатия сервер должен был бы знать обо всех, кто читает канал, и имейте способ связаться с ними. Это - список рассылки - точно одна из вещей, которых RSS был разработан для предотвращения. Следовательно то, что большинством моих примеров являются сетевые приложения, где это, скорее всего, будет проблемой.

Другие времена, опрос является достаточно дешевым для работы даже там, где существует асинхронное уведомление.

Для локального файла, уведомление об изменениях, вероятно, будет более оптимальным вариантом в принципе. Например, Вы, сила (могла) бы предотвратить диск, вращающийся вниз, если Вы навсегда вводите его по абсолютному адресу, хотя с другой стороны ОС могла бы кэшироваться. И если Вы опрашиваете каждую секунду на файле, который только изменяется раз в час, Вы могли бы напрасно занимать 0,001% (или безотносительно) вычислительной мощности Вашей машины. Это звучит крошечным, но что происходит, когда существует 100 000 файлов, необходимо ли опросить?

На практике, тем не менее, издержки, вероятно, будут незначительны, какой бы ни Вы делаете, будучи сложно приходить в восторг от изменяющегося кода, который в настоящее время работает. Лучшая вещь состоит в том, чтобы не упустить определенные проблемы, что опрашивающие причины в системе, которую Вы хотите изменить - при нахождении кого-либо тогда повышают тех вместо того, чтобы пытаться привести общий аргумент против всего опроса. Если Вы не находите никого, то Вы не можете зафиксировать то, что не повреждается...

24
ответ дан Steve Jessop 27 November 2019 в 15:55
поделиться

Существует две причины, почему опрос мог считать плохим принцип.

  1. Это - трата ресурсов. Вероятно, что Вы проверите для разнообразия, в то время как никакое изменение не произошло. Циклы/пропускная способность ЦП тратят на это действие, не приводит к изменению и таким образом, возможно, был лучше, тратят на что-то еще.

  2. Опрос сделан на определенном интервале. Это означает, что Вы, won’t знают, что изменение происходило до следующего раза, когда интервал передал.

было бы лучше быть уведомленным относительно изменений. Этот путь you’re не опрашивающий относительно изменений, что haven’t произошел и you’ll, знает об изменении, как только Вы получаете уведомление.

23
ответ дан hopla 27 November 2019 в 15:55
поделиться

Если Вы опрашиваете относительно изменений в файле, то я соглашаюсь, что необходимо использовать уведомления о файловой системе, которые доступны для того, когда это происходит, которые доступны в большинстве операционных систем теперь.

В базе данных Вы могли включить, обновляют/вставляют и затем называют Ваш внешний код, чтобы сделать что-то. Однако могло бы просто случиться так, что у Вас нет требования для мгновенных действий. Например, Вы, возможно, только должны были бы получить данные из Базы данных к Базе данных B в различной сети в течение 15 минут. База данных B не могла бы быть доступной от Базы данных A, таким образом, Вы заканчиваете тем, что делали опрос от, или как автономная программа, работающая рядом, База данных B.

кроме того, Опрос является очень простой вещью программировать. Это - часто реализация первого шага, сделанная, когда ограничения времени коротки, и потому что это работает достаточно хорошо, это остается.

2
ответ дан JeeBee 27 November 2019 в 15:55
поделиться

I gave my client a little manual on how to make links including a screenshot of the menu(s). Then it becomes quite easy! I wouldn't know of any extensions for that, then again I don't know all joomla extensions ;)

--121 --- 4044063--

Опрос клиента не масштабируется так же, как уведомления сервера. Представьте себе, что тысячи клиентов спрашивают у сервера «какие-нибудь новые данные?» каждые 5 секунд. Теперь представьте, что сервер ведет список клиентов для уведомления о новых данных. Уведомление сервера масштабируется лучше.

8
ответ дан 27 November 2019 в 15:55
поделиться

Here is a good summary of relative merits of push and pull: https://stpeter.im/index.php/2007/12/14/push-and-pull-in-application-architectures/

I wish I could summarize it further into this answer but some things are best left unabridged.

0
ответ дан 27 November 2019 в 15:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: