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

Допустим, что вам надо сжать звуковой файл WAV в МРЗ. Программа может вывести модальное диалоговое окно (которое блокирует работу программы, пока не будет закрыто) и выполнять преобразование. В этом случае пользователь не может продолжать дальнейшую работу, и каждая минута ожидания будет раздражительной.

Если не блокировать работу, делать преобразование в отдельном потоке, а на экране выводить состояние процесса, то пользователь будет в состоянии работать дальше и, может быть, даже проигрывать какой-то другой файл, не утомляясь. Время "пробегает" незаметно, и создается впечатление быстрой работы. Ярким примером такой программы является Media Player, который позволяет проигрывать и оцифровывать звук с компакт-диска одновременно.

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

Использование потоков может действительно (без создания видимости) увеличивать скорость работы даже офисного приложения. Простейший пример - Word и его проверка орфографии. Представьте себе, если после введения каждого слова программа искала бы его в словаре и проверяла орфографические и грамматические ошибки.

Чтобы не было лишних задержек, орфография проверяется в фоне отдельным потоком. Это не затрудняет работу с программой, хотя ошибка может отобразиться не сразу, а через какой-то промежуток времени. Пользователей это не смущает, потому что работа с программой продолжается, а если во время набора текста система не перегружается (параллельно происходит сжатие видео или создание анимации в ЗОБ Мах), то задержки минимальны. При большой нагрузке системы работа с текстом возможна, хотя проверка орфографии будет происходить с длительными задержками.

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

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

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

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

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

2.10. Буферизация вывода || Оглавление || 2.12. Оптимизация в базах данных


Delphi в шутку и всерьез: что умеют хакеры



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31