48837 (Робота з "потоками" в середовищі Delphi)

2016-07-31СтудИзба

Описание файла

Документ из архива "Робота з "потоками" в середовищі Delphi", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48837"

Текст из документа "48837"

Робота з «потоками » в середовищі Delphi

Працюючи з Delphi, потрібно мати на увазі: цей чудовий продукт не тільки спрощує розробку складних додатків, він використовує при цьому всі можливості операційної системи. Одна з можливостей, яку підтримує Delphi, – це так звані потоки (threads) або нитки.

Потоки дозволяють в рамках однієї програми вирішувати декілька задач одночасно. З недавніх пір операційні системи для персональних комп'ютерів зробили це можливим.

Операційна система (ОС) надає додатку деякий інтервал часу центрального процесора (ЦП) і в мить, коли додаток переходить до очікування повідомлень або звільняє процесор, операційна система передає управління іншій задачі. Тепер, коли комп'ютери з більш ніж одним процесором різко впали в ціні, а операційна система Windows NT може використовувати наявність декількох процесорів, користувачі дійсно можуть запускати одночасно більше однієї задачі. Плануючи час центрального процесора, Windows 95 або Windows NT розподіляють його між потоками, а не між додатками. Щоб використовувати всі переваги, забезпечувані декількома процесорами в сучасних операційних системах, програміст повинен знати, як створювати потоки.

У цьому рефераті розглядаються наступні питання:

  • що таке потоки;

  • різниця між потоком і процесом;

  • переваги потоків;

  • клас TThread в Delphi;

  • реалізація багатопотокового додатку;

  • синхронізація потоків.

Визначення потоку досить просте: потоки – це об'єкти, одержуючі час процесора. Час процесора виділяється квантами (quantum, time slice). Квант часу – це інтервал, що є у розпорядженні потоку доти. поки час не буде передано в розпорядження іншого потоку.

Кванти виділяються не програмам або процесам, а породженим ними потокам. Як мінімум, кожен процес має хоча б один (головний) потік, але сучасні операційні системи, починаючи з Windows 95 (для прихильників Borland Kylix і Linux також), дозволяють запустити в рамках процесу декілька потоків.

Найпростіший приклад їх використовування – додатки з складу Microsoft Office. Наприклад, пакети Excel і Word задіють по декілька потоків. Word може одночасно коректувати граматику і друкувати, при цьому здійснюючи введення даних з клавіатури і миші; програма Excel здатна виконувати фонові обчислення і друкувати.

Примітка

Взнати число потоків, запущених додатком, в Windows NT, 2000 і ХР можна за допомогою утиліти Task Manager (Диспетчер задач). Для цього серед показників, що відображаються у вікні Processes, потрібно вибрати опцію Thread Count. Так, у момент написання цих рядків MS Word використовував 5 потоків, середовище Delphi – 3.

Якщо задачі додатку можна розділити на різні підмножини: обробка подій, введення / висновок, зв'язок і ін., то потоки можуть бути органічно вбудовані в програмне рішення. Якщо розробник може розділити велику задачу на декілька дрібних, це тільки підвищить переносимість коду і можливості його багатократного використовування.

Зробивши додаток багатопотоковим, програміст дістає додаткові можливості управління їм. Наприклад, через управління пріоритетами потоків. Якщо один з них «пригальмовує» додаток, займаючи дуже багато процесорний час, його пріоритет може бути знижений.

Інша важлива перевага упровадження потоків – при зростанні «навантаження» на додаток можна збільшити кількість потоків і тим самим зняти проблему.

Потоки спрощують життя тим програмістам, які розробляють додатки в архітектурі клієнт/сервер. Коли потрібне обслуговування нового клієнта, сервер може запустити спеціально для цього окремий потік. Такі потоки прийнято називати симетричними потоками (symmetric threads) – вони мають однакове призначення, виконують один і той же код і можуть розділяти одні і ті ж ресурси. Більш того, додатки, розраховані на серйозне навантаження, можуть підтримувати пул (pool) однотипних потоків. Оскільки створення потоку вимагає певного часу, для прискорення роботи бажано наперед мати потрібне число готових потоків і активізувати їх у міру підключення чергового клієнта.

Примітка

Такий підхід особливо характерний для Web‑серверу Microsoft Internet Information Services і додатків, оброблювальних запити в його середовищі. Якщо ви створюєте додатки ISAPI на Delphi, то можете використовувати пулінг потоків, підключивши до проекту модуль ISAPIThreadPool.pas. Якщо ви хочете запозичити ідеї для інших цілей, ознайомтеся з вмістом цього модуля.

Асиметричні потоки (asymmetric threads) – це потоки, вирішальні різні задачі і, як правило, не розділяючі сумісні ресурси. Необхідність в асиметричних потоках виникає:

  • коли в програмі необхідні тривалі обчислення, при цьому необхідно зберегти нормальну реакцію на введення;

  • коли потрібно обробляти асинхронне введення / висновок з використанням різних пристроїв (Сом-порту, звукової карти, принтера і т. п.);

  • коли ви хочете створити декілька вікон і одночасно обробляти введення в них.

Коли ми говоримо «програма» (application), то звичайно маємо на увазі поняття, в термінології операційної системи що позначається як «процес». Процес складається з віртуальної пам'яті, виконуваного коду, потоків і даних. Процес може містити багато потоків, але обов'язково містить, принаймні, один. Потік, як правило, має «у власності» мінімум ресурсів; він залежить від процесу, який і розпоряджається віртуальною пам'яттю, кодом, даними, файлами і іншими ресурсами ОС.

Чому ми використовуємо потоки замість процесів, хоча, при необхідності, додаток може складатися і з декількох процесів? Річ у тому, що перемикання між процесами – значно більш трудомістка операція, ніж перемикання між потоками. Інший довід на користь використовування потоків – те, що вони спеціально задумані для розділення ресурсів; розділити ресурси між процесами (що мають роздільний адресний простір) не так-то просто.

Тут ми розглянемо можливість для організації фонових дій (job) усередині однопотокової програми із збереженням реакції цього потоку на події від миші і клавіатури.

Ще не так давно програмісти намагалися емулювати потоки, запускаючи процедури усередині циклу обробки повідомлень Windows. Цикл обробки повідомлень (або цикл очікування) – це особливий фрагмент коду в програмі, керованій подіями. Він виконується тоді, коли програма знаходить в черзі події, які потрібно обробити; якщо таких немає, програма може виконати в цей час «фонову процедуру». Такий спосіб імітації потоків вельми складний, оскільки вимушує програміста, по-перше, зберігати стан фонової процедури між її викликами, а по-друге, визначати момент, коли вона поверне управління обробнику подій. Якщо така процедура виконується довго, то у користувача може скластися враження, що додаток перестав реагувати на зовнішні події. Використовування потоків знімає проблему перемикання контексту, тепер контекст (стек і регістри) зберігає операційна система.

У Delphi можливість створити фонову процедуру реалізована через подію Onldle.объекта Application!

type TIdleEvent = procedure (Sender: TObject;

var Done: Boolean)

of object;

property Onldle: TIdleEvent;

Обробник цієї події ви можете написати, помістивши на форму компонент TApplicationEvents із сторінки Additional Палітри компонентів.

Щоб зробити у фоновому режимі якусь роботу, слід розбити її на кванти і виконувати по одному кванту кожен виклик Onldle – інакше додаток погано реагуватиме на зовнішні дії.

Інтерфейс Win32 API дозволяє програмісту управляти розподілом часу між потоками; це розповсюджується і на додатки, написані на Delphi. Операційна система планує час процесора відповідно до пріоритетів потоків.

Пріоритет потоку – величина, що складається з двох складових частин: пріоритету породжувача потік процесу і власне пріоритету потоку. Коли потік створюється, йому призначається пріоритет, відповідний пріоритету його процесу, що породив.

У свою чергу, процеси можуть мати наступні класи пріоритетів.

  • Real time;

  • Normal;

  • High;

  • Below normal;

  • Above normal;

  • Idle.

Примітка

Класи Above normal і Below normal з'явилися вперше в Windows 2000.

Клас реального часу задає пріоритет навіть більший, ніж у багатьох процесів операційної системи. Такий пріоритет потрібен для процесів, оброблювальних високошвидкісні потоки даних. Якщо такий процес не завершиться за короткий час, користувач відчує, що система перестала відгукуватися, оскільки навіть обробка подій миші не одержить часу процесора.

Використовування класу High обмежене процесами, які повинні завершуватися за короткий час, щоб не викликати збійної ситуації. Приклад – процес, який посилає сигнали зовнішньому пристрою; причому пристрій відключається, якщо не одержить своєчасний сигнал. Якщо у вас виникли проблеми з продуктивністю вашого додатку, було б неправильно вирішувати їх просто за рахунок підвищення його пріоритету до high – такий процес також впливає на всю ОС. Можливо, в цьому випадку слід модернізувати комп'ютер.

Більшість процесів запускається в рамках класу з нормальним пріоритетом. Нормальний пріоритет означає, що процес не вимагає якої-небудь спеціальної уваги з боку операційної системи.

І нарешті, процеси з фоновим пріоритетом запускаються лише в тому випадку, якщо в черзі Диспетчера задач немає інших процесів. Звичні види додатків, використовуючи такий пріоритет, – це програми збереження екрану і системні агенти (system agents). Програмісти можуть використовувати фонові процеси для організації завершальних операцій і реорганізації даних. Прикладами можуть служити збереження документа або резервне копіювання бази даних.

Пріоритети мають значення від 0 до 31. Процес, що породив потік, може згодом змінити його пріоритет; у цій ситуації програміст має нагоду управляти швидкістю відгуку кожного потоку.

Базовий пріоритет нитки складається з двох складових, проте це не означає, що він просто рівний їх сумі. Погляньте на відповідні величини, які показані в табл. 29.1. Для потоку, що має власний пріоритет THREAD_PRIORITY_IDLE, базовий пріоритет буде рівний 1, незважаючи на пріоритет його процесу, що породив.

І ще для класу Normal приведені по два пріоритети, забезпечені буквами В (Background) і F (Foreground). Пояснення цьому дається нижче.

Таблиця 29.1. Класи процесів і пріоритети їх потоків (для Windows 2000 і ХР)

IDLE_ PRIORITY CLASS

BELOW_ NORMAL PRIORITY CLASS

NORMAL_ PRIORITY_ CLASS

ABOVE_ NORMAL_ PRIORITY_ CLASS

HIGH PRIORITY CLASS

REALTIME PRIORITY CLASS

THREAD_ PRIORITY_

IDLE

1

1

1

1

1

16

THREAD_ PRIORITY LOWEST

2

4

5 (B)

7 (F)

8

11

22

THREAD_ PRIORITY_ BELOW NORMAL

3

5

6 (B)

8 (F)

9

12

23

THREAD_ PRIORITY_ NORMAL

4

6

7 (B)

9 (F)

10

13

24

THREAD PRIORITY_ ABOVE_ NORMAL

5

7

8 (В)

10 (F)

11

14

25

THREAD_ PRIORITY_ HIGHEST

6

8

9 (B)

11 (F)

12

15

26

THREAD_ PRIORITY TIME CRITICAL

15

15

15

15

15

31

Крім базового пріоритету, описуваного в цій таблиці, планувальник завдань (scheduler) може призначати так звані динамічні пріоритети. Для процесів класу NORMAL_PRIORITY_CLASS при перемиканні з фонового режиму в режим переднього плану і у ряді інших випадків пріоритет потоку, з яким створено вікно переднього плану, підвищується. Так працюють всі клієнтські операційні системи від Microsoft. Серверні операційні системи оптимізовані для виконання фонових додатків. Втім, Windows NT і пізніші ОС на цьому ядрі дозволяють перемикати режим оптимізації, використовуючи перемикач Application response аплета System панелі управління Windows (мал. 29.1).

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
436
Средний доход
с одного платного файла
Обучение Подробнее