Разработка многопоточных приложений. Рудалев В.Г - 3 стр.

UptoLike

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