Pull to refresh

Comments 9

>В любой момент времени выполняется только одна задача.
Но многоядерных процессорах тоже??
Немного не по теме статьи, а про использование возможностей ОСРВ. Представим, что я решил посчитать что-то с высокой точностью, для чего представляю дробь с помощью двух целых чисел. Разумно сокращать дроби, чтобы считалось быстрее и памяти ело меньше. Можно ли быстро, в идеале парой строк или аннотацией, сделать функцию сокращения крутиться в фоне, а не создавать вручную отдельную задачу или поток?

Зависит от того, что же вам надо. "Крутиться в фоне" — это по сути является созданием еще одного потока, просто с более низким приоритетом и уйти от его создания вы никак не сможете. Вопрос лишь в том, создавать ли поток на каждую такую задачу или сделать низкоприоритетную рабочую очередь.


Подобным образом реализовано передача заданий в lwIP: есть очередь из структур, одним из полей которого является указатель на функцию, а другим — ее аргументы (лямбды в С++ делают что-то похожее). Задача рабочей очереди берет задание, выполняет его в своем контексте, а по завершению семафорит о завершении.


Ключевое здесь: "в своем контексте". То есть у "фонового процесса" есть свой стек и контекст.


Наличие или отсутствие "рабочей очереди" зависит от реализации конкретной RTOS.

Проблема в самих дробях. В крайнем случае придётся заниматься факторизацией длинных(>2^64) чисел, при этом потребность в памяти всё равно может расти из-за простых числителя и знаменателя. Итого — потенциальная бомба по памяти и вычислительной сложности в задачах настоящего времени. Это помимо того, что существуют иррациональные числа — действительные числа, непредставимые в виде простой дроби. Довольно безумно.

Как понять, что пора переходить на ОСРВ или еще рано? Пока все неплохо работает без ОС

Обычно когда пишете планировщик или с матюгами строите иерархию конечных автоматов. Я начал, когда понял, что слишком пристально курю protothreads.
Sign up to leave a comment.

Articles