Ами това е смисълът на кооперативна многозадачност, задачата решава
кога да каже "айде време ми е да си почина до следващо повикване".
Този подход има предимството, че като няма какво да прави - напр. чака
събитие - системата веднага отива да върши друго (ако приложението се
сети, че чака и си каже, де).
Ако не се сети, трябва да бъде принудително извадено.
Единият подход не изключва другия - в DPS се ползват и двете.
Нормално някоя задача като си копае нещо ако отиде да чака я копче,
я опресняване на прозорец, излиза за преразпределяне. Може също да
излезе и да каже "хич не ме търси поне еди-колко си време, и без
друго няма да има какво да правя". Може да излезе и да каже "нямам
нищо против системата да подремне" - и ако всички текущи задачи
са казали последно, че са съгласни на дрямка, системата влиза в
nap mode за 10-тина милисекунди (това драматично намалява консумацията
по време на обща дрямка, събуждането е за много малко - не съм го
мерил, но доста под 1 милисекунда ще е).
Ако пък задачата просто си копае и не пуска - напр. смята нещо тежко - след
някое време (обикновено 10 mS, но може дори и под милисекунда да е)
бива извадена насилствено.