Языки программирования. Практический сравнительный анализ


Языки программирования. Практический сравнительный анализ - стр. 221


Хотелось бы понять, в каких ситуациях нельзя обойтись без асинхронных процессов.

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

 

4.14.2. Пример. Система регистрации и обработки сообщений

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

      r - e,

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

Обсуждение. Как проектировать такую систему?

Ясно, что если для каждого сообщения вынолнять сначала А, потом С и только затем принимать новое сообщение, то можно опоздать - ведь времени потребуется до 4r, а минимальный интервал - всего r.

Поэтому совершенно необходимо применить асинхронное выполнение этапов А и С, своего рода поточную линию, состоящую в данном случае из "станков" А и С. Станок А воспринимает очередное сообщение, анализирует его и передает результат станку С, а сам принимает и обрабатывает следующее сообщение. Система станет успевать воспринимать каждое сообщение (ведь А работает меньше r). Но возможно отставание из-за С. Теперь станок С может не успевать получать результаты анализа от А.

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


- Начало -  - Назад -  - Вперед -