Компоненты и технологии • №2 '2011 компоненты



Pdf көрінісі
бет96/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   92   93   94   95   96   97   98   99   ...   129
Kurniz

Выполнение сопрограмм
и их приоритеты
Как и при создании задачи, при создании 
сопрограммы ей назначается приоритет. 
Сопрограмма с высоким приоритетом имеет 
преимущество на выполнение перед сопро-
граммой с низким приоритетом.
Следует помнить, что приоритет сопро-
граммы дает преимущество на выполнение 
одной сопрограммы только перед другой со-
программой. Если в программе используют-
ся как задачи, так и сопрограммы, то задачи 
всегда будут иметь преимущество перед со-
программами. Сопрограммы выполняются 
только тогда, когда нет готовых к выполне-
нию задач.
Важно, что преимущество на выполнение 
не означает, что если в системе появилась 
готовая к выполнению сопрограмма с более 
высоким приоритетом, чем та, что выполня-
ется в данный момент, то управление полу-
чит эта высокоприоритетная сопрограмма.
Сопрограммы выполняются в режиме ко-
оперативной многозадачности. Это означает, 
что одна сопрограмма сменяет другую лишь 
тогда, когда выполняющаяся в данный мо-
мент сопрограмма сама передает управление 
другой сопрограмме посредством вызова 
API-функции. Причем если в момент переда-
чи управления в состоянии готовности к вы-
полнению находятся несколько сопрограмм, 
то управление получит самая высокоприори-
тетная среди них.
Итак, сопрограмма прерывает свое выпол-
нение только при выполнении одного из сле-
дующих условий:
1. Сопрограмма перешла в блокированное 
состояние, вызвав соответствующую API-
функцию.
2. Сопрограмма выполнила принудительное 
переключение на другую сопрограмму 
(аналог принудительного переключения 
контекста задачи).
3. Сопрограмма была вытеснена задачей, ко-
торая до этого находилась в приостанов-
ленном или блокированном состоянии.
Сопрограмма не может быть вытеснена 
другой сопрограммой, однако появившаяся 
готовая к выполнению задача вытесняет лю-
бую сопрограмму.
Д л я ко р р е к т н о г о в ы п о л н е н и я с о -
п р о г р а м м н е о б х о д и м о о р г а н и з о -
вать в программе периодический вы-
зов API-функции vCoRoutineSchedule()
Рекомендованное место для вызова API-
функции vCoRoutineSchedule() — тело за-
дачи Бездействие, подробнее об этом бу-
дет написано ниже. После первого вызова 


Достарыңызбен бөлісу:
1   ...   92   93   94   95   96   97   98   99   ...   129




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет