ВУЗ:
Составители:
Рубрика:
3
Повышение быстродействия, экономия ресурсов и расширение функцио-
нальных возможностей программы. Многопоточность позволяет параллельно
выполнять отдельные участки программы на ЭВМ с несколькими процессорами,
или выполнять их на одном процессоре «псевдопараллельно», используя меха-
низм вытесняющей многозадачности Windows. Например, различные потоки в
Microsoft Word одновременно принимают пользовательский ввод, проверяют ор-
фографию в фоновом режиме и печатают документ. Microsoft Excel строит диа -
граммы и выполняет математические расчеты в фоновом режиме. Сервер баз дан -
ных для ответа на каждый запрос клиента запускает отдельный поток, в против -
ном случае пришлось бы либо запускать отдельную копию сервера, напрасно рас-
ходуя ресурсы , либо чрезвычайно усложнять логику его работы . Интерфейс при-
кладных программ разнообразят анимация , воспроизведение звука и т. п ., выпол-
няемые отдельными потоками.
Напомним , что при вытесняющей многозадачности потоки выполняются по-
переменно, время процессора выделяется потокам квантами (около 19 мс). ОС
вытесняет поток, когда истечет его квант или когда на очереди поток с большим
приоритетом. Приоритеты постоянно пересчитываются , чтобы избежать монопо-
лизации процессора одним потоком. С каждым потоком связан контекст –
структура, содержащая информацию о состоянии потока, в том числе содержимое
регистров процессора. (Более подробную информацию можно получить , изучив
структуру TContext в файле windows.pas из папки ..\borland\delphi4\source\rtl\win.)
Вытеснение потока сопровождается сохранением содержимого регистров в кон-
тексте, а получение потоком кванта времени - восстановлением регистров из кон-
текста.
К числу типичных проблем , возникающих при использовании потоков, отно -
сятся так называемые гонки и тупики . Конфликт (collision) гонок происходит, ко -
гда два потока пытаются изменить одну и ту же области памяти. Если не пред-
принимать специальных мер синхронизации, результат будет непредсказуемым и
зависимым от того, какой из потоков «успеет первым». Например, на счету в бан -
ке было 1000$. Первый поток снял 300$ со счета в банке, но остаток записать не
успел , так как был вытеснен другим потоком. Второй поток снял деньги 999$ (ра-
зумеется , с 1000$), записал остаток 1$, но тут управление вновь получил первый
поток и, записав остаток 700$, уничтожил «следы деятельности» второго потока.
Тупики возникают, когда потоки ожидают ресурсы , занимаемые друг другом.
Например, поток А держит ресурс 1, ожидая когда поток Б отдаст ему ресурс 2,
Но поток Б ресурс не отдает, так как ждет ресурса 1. В результате оба потока без -
действуют.
Обе проблемы могут быть решены с помощью средств синхронизации пото -
ков, описываемых ниже.
П овы ш е н и еб ы стр оде йстви я, экон ом и я р есур сов и р асш и р е н и ефун кци о- н альн ы х возм ож н осте й пр огр ам м ы . М ног оп оточность п озволяет п араллельно вы п олнять отдельны е участкип рог раммы наЭ В М снесколькимип роцессорами, или вы п олнять их наодном п роцессоре « п севдоп араллельно», исп ользуя меха- низм вы тесняю щ ей мног озадачнос ти Windows. Н ап ример, различны е п отоки в Microsoft Word одновременно п ринимаю т п ользовательский ввод, п роверяю т ор- ф ог раф ию в ф оновом реж име ип ечатаю т документ. Microsoft Excel с троит диа- г раммы ивы п олняетматематическиерасчеты в ф оновом реж име. Сервер б аздан- ны х для ответанакаж ды й зап росклиентазап ускает отдельны й п оток, в п ротив- ном случаеп риш лос ь б ы либ о зап ускать отдельную коп ию сервера, нап расно рас- ходуя ресурсы , либ о чрезвы чайно ус лож нять лог ику ег о раб оты . И нтерф ейсп ри- кладны х п рог рамм разнооб разятанимация, восп роизведениезвукаит.п ., вы п ол- няемы еотдельны мип отоками. Н ап омним, что п ривы тесняю щ ей мног озадачностип отокивы п олняю тся п о- п еременно, время п роцессоравы деляется п отокам ква н т а м и (около 19 мс). О С вы тесняет п оток, ког даистечет ег о квант иликог данаочередип оток сб ольш им п риоритетом. П риоритеты п ос тоянно п ересчиты ваю тся, чтоб ы изб еж ать моноп о- лизации п роцессора одним п отоком. С каж ды м п отоком связан кон т екст – структура, содерж ащ ая инф ормацию о состояниип отока, в том числесодерж имое рег истров п роцессора. (Более п одроб ную инф ормацию мож но п олучить, изучив структуру TContext в ф айле windows.pas изп ап ки..\borland\delphi4\source\rtl\win.) В ы теснение п отокасоп ровож дается сохранением содерж имог о рег истров в кон- тексте, ап олучениеп отоком квантавремени- восстановлением рег истров изкон- текста. К числу тип ичны х п роб лем, возникаю щ их п риисп ользованиип отоков, отно- сятся так назы ваемы егон ки и т у пи ки . К онф ликт(collision) гон ок п роисходит, ко- г дадвап отокап ы таю тс я изменить одну иту ж е об ластип амяти. Е слине п ред- п ринимать сп ециальны х мер синхронизации, результатб удетнеп редс казуемы м и зависимы м оттог о, какой изп отоков « усп еетп ервы м». Н ап ример, насчету в б ан- кеб ы ло 1000$. П ервы й п оток снял 300$ со счетав б анке, но остаток зап исать не усп ел, так как б ы л вы тес нен друг им п отоком. В торой п оток снял деньг и999$ (ра- зумеетс я, с1000$), зап исал остаток 1$, но тут уп равление вновь п олучил п ервы й п оток и, зап исав ос таток 700$, уничтож ил « следы деятельности» второг о п отока. Ту пи ки возникаю т, ког да п отокиож идаю трес урсы , занимаемы едруг друг ом. Н ап ример, п оток А держ ит рес урс1, ож идая ког дап оток Б отдас т ему ресурс2, Н о п оток Б ресурснеотдает, так как ж детресурса1. В результатеоб ап отокаб ез- действую т. О б е п роб лемы мог ут б ы ть реш ены сп омощ ью средств синхронизациип ото- ков, оп исы ваемы х ниж е. 3