215 похожих чатов

Разговор пошел по кругу. если вам повезло никогда не ловить

баги многопоточной синхронизации, которые не воспроизводятся под отладчиком, это великолепно, но это не делает проблему выдуманной. проблема реальна, и в том, что вы с ней не столкнулись, заслуга не ваша, а разработчиков тех библиотек, которыми вы пользовались.

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

Если убрать преемптивность из уравнения, сделав переключение явным, анализ сводится только к тем точкам, где переключение контекста возможно - в местах, где происходит await, и управление возвращается в цикл событий / реактор / шедулер.

Есть ли хоть одна причина, почему зеленым потокам нужно быть преемптивными? Выигрыша в скорости работы это не даст, т.к. все зеленые потоки разделяют один физический поток, в котором они запущены. Простоты коду это не добавит по причине выше, т.к. к явным переключениям контекста (сисколлы, ожидания событий, отправка событий) добавляются еще и неявные по таймеру или счетчику инструкций.

Если вам не сложно, приведите причину, почему зеленому потоку в принципе нужно быть преемптивным. Я не вижу таких причин - корутины с кооперативной многозадачностью позволяют делать все то же, что могут делать зеленые потоки, но проще и безопаснее.

++++++++++++++

и давайте таки вынесем эту дискуссию из DS-чата. Если кто желает ее продолжить в стороннем канале, поделитесь ссылкой.

1 ответов

22 просмотра

Плюс в том, что код выглядит абсолютно линейно как буд-то это обычный синхронный код. Дополнительный плюс еще по сравнению с питоном в том, что все не нужны никакие специальные библиотеки. Весь код работает с IO асинхронно в любом случае и из коробоки. P.S. По поводу организации доступа к памяти - можно добиться ровно того же эффекта, что и с io loop завернув код в актор, который серелизует обращение к его внутреннему стейту. Все, нет проблемы.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта