kopia lustrzana https://github.com/micropython/micropython-lib
![]() Instead of using single priority queue for all tasks, split into using "run queue", which represents tasks not waiting until specific time, which should be run on every (well, next) loop iteration, and wait queue, still a priority queue. Run queue is a simple FIFO, implemented by ucollections.deque, recently introduced in pfalcon/micropython. Thus, there's minimal storage overhead and intrinsic scheduling fairness. Generally, run queue should hold both a callback/coro and its arguments, but as we don't feed any send args into coros still, it's optimized to hold just 1 items for coros, while 2 for callbacks. Introducing run queue will also allow to get rid of tie-breaking counter in utimeq implementation, which was introduced to enforce fair scheduling. It's no longer needed, as all tasks which should be run at given time are batch-removed from wait queue and batch-inserted into run queue. So, they may be executed not in the order scheduled (due to non-stable order of heap), but the whole batch will be executed "atomically", and any new schedulings from will be processed no earlier than next loop iteration. |
||
---|---|---|
.. | ||
core.py |