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

Хех, сегодня копнул еще глубже в историю CLR-over-fibers и, кажется,

достиг ее дна.
Начиналось все с наличия [Obsolete] на AppDomain.GetCurrentThreadId() и методов Thread.BeginThreadAffinity()/Thread.EndThreadAffinity() - мол не ориентируйтесь на идентификатор нативного потока, управляемый поток может крутиться поверх fibers и перескакивать с одного потока на другой. И этот [Obsolete] можно игнорировать в случае UI-потока, так как он всегда STA и привязан к одному нативному потоку всегда.
Но тут пришел @EgorBo и сообщил, что CLR и CoreCLR нифига такого не поддерживают и не планируют поддерживать, и там всегда управляемый поток всегда привязан к нативному (с оговоркой, пока не был позван Start - управляемый поток не привязан ни к какому потоку). Значит, думаю, это специфичная фича для SQLCLR (CLR которая крутится внутри SqlServer) и за пределами SqlServer можно об этом сценарии не думать.
Однако, сегодня выясняю, что хоть SqlServer и поддерживает fiber mode (называемый lightweight pooling) - но в таком режиме не поддерживается использование SQLCLR! Думаю - может сломали в SqlServer 2012, который переехал c CLR 2.0 на CLR 4.0? Но нет, в 2008 и 2008R2 такая же история!
Полез копать документацию - везде фигурирует в качестве примера SqlServer 2005, мол в нем fiber mode возможен. Полез копать глубже - нет! В SqlServer 2005 точно такая же история.
Оказалось, что в первых версиях CLR предполагалось, что управляемый поток всегда привязан к нативному, но при разработке CLR 2.0 специально для SqlServer 2005 предусмотрели режим работы CLR в fiber mode, и завезли кучу абстракций в корлиб (Thread.BeginThreadAffinity etc) и в рантайм (ICLRTask, IHostTask + соответствующие менеджеры). На базе этих абстракций написали документацию, книги, завели соответствующие code analysis rules... но фичу эту так никогда и не выкатили! Потому что криво работает, особенно в сценарии долгоживущего процесса (коим SqlServer и является). И единственный способ такой сценарий посмотреть - это взять и руками допилить SSCLI 2.0 что б вернуть поддержку такого режима.
И вот ради такого никогда не поддерживаемого сценария у нас есть фактически no-op API в корлибе, и бесполезный пятнадцатилетний [Obsolete] на AppDomain.GetCurrentThreadId() (и видимо из-за него забили на нормальный порт этого метода на NetCore - в NetFramework возвращался идентификатор текущего нативного потока, в NetCore вместо OsThread.GetCurrentThreadId()/PlatformNotSupportedException возвращается Environment.CurrentManagedThreadId. Хотя, это может быть просто ленивый дизайн "что б хоть что-то было", как в ситуации с CultureInfo.ListSeparator)

11 ответов

24 просмотра

Возникает вопрос, раз фича (fiber mode) по-сути так и не использовалась, то зачем поддерживать эту нигде не используемую и добавляющую сложность абстракцию?

Интересно, а Xbox, Silverlight или WinPhone могли использовать?

Evgeniy-Alexandrov Автор вопроса
Pavel S
Возникает вопрос, раз фича (fiber mode) по-сути та...

Видимо к моменту создания ReleaseCandidate CLR 2.0 уже было слишком дорого выпиливать сделанный код из основного бранча (и там был явно не git, а SourceDepot скорее), а потом оставили API для поддержки обратной совместимости

Evgeniy Alexandrov
Видимо к моменту создания ReleaseCandidate CLR 2.0...

Не пора ли внести предложение в .нет выпилить и отправить на покой?

Evgeniy-Alexandrov Автор вопроса
Anatoly
SourceSafe?

Не, этот ужас вроде только купили, что б вместе с VisualStudio 6.0 поставлять, а внутри не использовали

Evgeniy-Alexandrov Автор вопроса

А фиг его знает, если про SQLCLR в 2005 еще можно что-то нагуглить, то эти таргеты и детали реализации рантайма инфы крайне мало. Не помню, был ли в API WinPhone вообще System.Thread или нет

Evgeniy Alexandrov
А фиг его знает, если про SQLCLR в 2005 еще можно ...

Просто у кого-то хорошие детективные навыки, ну и результат вообще на статью годится как по мне

Andrii Kurdiumov
Просто у кого-то хорошие детективные навыки, ну и ...

На ишшуй в репе кора, чтобы кто нить убрал ненужное в коре

Я могу только предлагать самому удалить код

Andrii Kurdiumov
Я могу только предлагать самому удалить код

Удалить можно, но это значительное изменение

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта