Обновить
128
0

Пользователь

Отправить сообщение

Это не совсем нить. Вы верно заметили, что если волокно зависло, то вся механика останавливается. Нити управляются иначе, посредством ядра ОС или, как минимум, прерываний от таймера. Прерывания позволяют преодолевать эффекты зависаний. Волокна больше про легковесность и работу с неблокирующими функциями i/o.

Я стараюсь всё писать без ненужной заумности.

Спасибо за оценку :)

Идею понял. Интересно. Есть над чем подумать. Благодарю за добрые слова, они приятны не только кошке, но и мне :)

Спасибо за идею! "В процессоре" - это я вряд-ли осилю, но взвесить атом - почему бы и да... Хотите? Там всё просто, на уровне химии 9 класса.

Спасибо за тёплые слова. В статье я хотел показать именно сам принцип. Конечно, я не сделал какое-то production-ready решение, а только демо. С gnu pth я не имел дела, посмотрю, что это такое и как работает. Вам плюсики :)

Скорее всего, так и сделаю :) Спасибо :)

Ситуация интересная и требует дополнительного изучения. Постараюсь копнуть поглубже. Отдельно благодарю вас за разъяснения на счёт MXCSR. Действительно, я этот момент не учёл.

Была идея сделать пример именно на базе "голого" микроконтроллера без ОС. Хотя бы того же Atmega328+Arduino. Но идея дать возможность всем желающим скачать и запустить пример без дополнительного оборудования определила целевую платформу. Согласен, что на МК это выглядит более органично.

Как верно отметили коллеги firehacker и arteast, пример получился не дружественным к Windows SEH. Плюс к этим замечаниям, была высказана мысль использовать setjmp/longjmp.

С поддержкой SEH попробую разобраться, но есть подозрение, что это только усложнит пример и уменьшит его учебную ценность. Если получится решить эту проблему как-то не слишком сложно, например, поселив стеки волокон в стеке самой "родительской" thread, напишу статью по итогу с примерами, как оно было и как стало.

Что касается setjmp/longjmp, то там не очень понятно, откуда появится новый стек для fiber. Возможно, я что-то упускаю из виду и есть способ относительно безболезненно это уладить. Если так, то буду рад любым полезным рекомендациям на этот счёт.

Огромное спасибо все отозвавшимся за обратную связь и ценные дополнения!

Увидите :) С Микрософт тоже не всё просто, вот там специалисты про сложности с SEH верно написали, а я вообще этот момент никак не учёл.

Saludos desde Serbia!

Спасибо вам за идею! Действительно, одну задачу можно рассматривать и решать по-разному.

Согласен. Спасибо за дополнение :)

Спасибо за важное замечание. В моём примере не учтено множество подобных моментов. Что-то можно допилить, но вряд ли кому-то это нужно для практических целей.

Можно было, наверное, и их. Но со стеком пришлось бы всё равно возиться на asm, как мне кажется.

Все верно, мне просто захотелось сделать что-то такое самостоятельно. Построить велосипед.

Спасибо за высокую оценку! Приятно!

Понимаю вашу точку зрения. Теперь уж выкидывать их бессмысленно, но полезные комментарии там тоже есть. Спасибо за замечание.

В моём примере всё намного проще. Первое, после настройки нового вектора таймера, прерывание вызывает обработчик в том же самом "процессе", где работает вся программа примера. Нити (threads) тоже работают в том же самом процессе, но им выделены отдельные стеки. Процессор 8086 никакими "взрослыми" средствами изоляции процессов не обладает. По сути, пример в статье показывает многозадачность (или многонитевость) примерно на том уровне, как это сделано в RTOS, работающей на одноядерном микроконтроллере.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Специалист
От 1 000 000 000 $