ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
3 мая
556713 Топик полностью
fk0123 (31.10.2014 12:05, просмотров: 1) ответил Скрипач на Отложите в сторону свою батарейку. У вас в системе есть задачи, которые (одновременно) НЕ ждут сигналов и НЕ готовы к выполнению? То, что (не забесплатно) поллинг сигналов перенесен из прикладных задач в супервизор не делает его бесплатным.
Термин "не готов к выполнению" мне не нравится. В событийной системе таких нет, не должно быть. И термин "задача" тоже. Но таки да, ждут. "Поллинг" не перенесён, он исключён -- вот разница. В конечном счёте источником события является только аппаратура (прерывание, таймер), нет никакой нужды _циклической_ проверки. Что-то вычисляется только когда необходимо. Разумеется в планировщике есть накладные расходы. И они могут показаться достаточно большими по сравнению с биглупом на относительно маленьких задачах. Точно так же, как "сложные" алгоритмы поиска методом Бойера-Мура или быстрой сортировки проигрывают простым, алгоритмам вроде линейного поиска на маленьких наборах данных. Но при дальнейшем росте объёма данных отрыв сложных решений от простых достигает значительных величин. Так же и здесь. В биглупе время реакции пропорционально O(E), где E -- число всех возможных в системе событий в данном состоянии. В описываемой мною планировщик тратит O(log2(e)) на вставку в очередь (и это с учётом приоритета, без приоритетов можно сделать битовое поле за O(1)), где e << E -- число необработанных событий. На обработку одного события из очереди -- O(log2(e)) с приоритетами (или опять же O(N) без приоритетов -- есть над чем подумать...), биглуп здесь тратит тоже O(N). Где N -- число получателей одного данного события с разными приоритетами, обычно небольшое число. Итого O(E) vs O(N*log2(e)). Допустим, маленькая система E=16, N=4, e==E (самый тяжёлый случай для e). O(16) == O(4*4). Биглуп не проигрывает, даже во многом проще. А возьмём E=256, N=8, e==E. O(256) > O(8*8==64) -- биглуп уже проигрывает. А для тысяч событий -- страшное дело... Биглуп может и выиграть при большом N (числе приоритетов), что вряд ли представлятся разумным. Но у планировщика здесь козырь в рукаве -- отказ от приоритетов даёт практически O(1) на все операции... правда практически большую систему без приоритетов не построишь.