ВУЗ:
Составители:
Рубрика:
 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
