Pull to refresh
153
0
Stanislav Sidristij @sidristij

Семинары по платформе .NET CLRium

Send message
Пишу на C# и Namarle для меня — это язык со сверхвозможностями. Надо просто попробовать =) JetBrains не просто так выкупили всех разработчиков Nemerle и взяли Nitra под свое крыло =)
За троллинг типами — пять баллов =) Но важен не сам тип, а число, которое туда записано =)))
Ну не минусуйте же вы его карму, что вы не как тех специалисты, а посетители пабликов. Сейчас проставит человек кат и будет счастье. статья-то годная )
[irony] прям теперь и прикопаться не к чему [/irony]
Эти статьи — результат просиживания дома по вечерам в отдалчике, иногда до часу ночи, а в выходные и до трех в течении (суммарно) месяцев 3-4-х. А вообще — часто времени вообще не хватало и были пробелы в несколько месяцев. Так что началось все года два назад, и только недавно все довел до ума. Сами статьи написались тоже не сразу =)
Если идти путем контекста, тогда инитить дочерний поток будет родительский. В моем случае дочерний поток инитит сам себя. В общем, разницы почти нету =) Только если в производительности. И то вопрос… ) ИМХО, решения получатся одинаковыми.
Пример… Например, встраивание в некий софт, который не предоставляет логов для какого-то функционала, но их снять по какой-то причине надо.

Или надо пропатчить сборку так чтобы та в GAC попала, а ключа для подписи новой сборки нету =)

Как и прошлая моя статья, эта — результат внезапного решения копать и изучать, потому области применения — скорее следствие а не причина =)
До завтрашнего дня обещаюсь выложить код на пробу =)
А чем это может помочь? Вы установите таким образом контекст нового потока таким же как родителя, включая стек. И у вас программа попрет в обоих потоках по одному и тому же участку памяти (стеку), что приведет к непредсказуемым последствиям.
Вы меня не слышите. В переносимый в другой поток кусок стека входят только мои методы + 1 пользовательский, который не должен содержать out и ref параметры. про свои методы я все знаю: они таким недостатком не обладают. Про пользовательский: если условие соблюдено, он также не будет создавать таких ссылок.
аааа, ну это да. Но тут будет такое же поведение как и у метода, помещенного в пул потоков. он также если обратится к такой переменной получит «все пропало», так что все логично
опять же нет, т.к. я копирую контекст от вызывающего метода до вложенного вызова C++/CloneThread. Это значит что я оперирую только тем, что знаю, как работает. Да, есть ограничение что вызывающий метод не должен иметь ref и out параметров (создают ссылки на стек — это как раз то, о чем Вы говорите), однако если в вызывающем методе их нет, все нормально. Все что выше по стеку — не важно, т.к. он не копируется.
ну TLS — то я не трогаю =) TLS я как раз хочу заиспользовать чтобы вживить в чужой тред исполнение метода =) Пример для вживление в тред чужого потока
Способ с Clone() дает те же преимущества. Просто, вы будете использовать другой стиль программирования.
Про пул потоков: в данном случае код склонированного flow выполнится во взятом из пула, потоке. По окончании исполнения метода поток будет обычным образом возвращен в пул
Ваш код должен учитывать что вы делаете Clone() Он же Ваш =)
Поэтому в самой библиотеке стоит ограничение до вызывающего метода. Это просто контролировать и логично само по себе. Бесконтрольный выход из вызывающего метода даст гору проблем с использованием.
Для чего это делать
Самое важное, для чего это делается — для закрепления понимания, как все работает и что если знать, можно этим начать манипулировать.


(a) Just for fun (b) для понимания как работают потоки
Реальное применение… Ну такое же как и у ThreadPool.QueueForUserWorkItem( () => {… }); Просто стиль программирования другой получается

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity