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

Кто-Нибудь видел, какая изначальная причина была при отказе от ThreadLocal

в лум? Начал тут разбирать как устроен ScopedValues, добравлся вот до этого(https://github.com/openjdk/jdk/blob/dc4bc4f0844b768e83406f44f2a9ee50686b1d9d/src/java.base/share/classes/java/lang/Thread.java#L302) и чет немножко не понял, они так же лежат в поле треда, Бейтман на последнем JVMLS немного упоминает, что отказ от TL благотворно влияет на некоторые GC(хотя мне стало не понятно, почему). И тут становится не понятно, а почему линкед лист(которым по-сути и является Snapshot в ScopedValues) лучше, чем хешмапа в том же поле треда. По mail-листам тоже ничего особо не нашел. Особенно беспокоит, что альтернативы для пула объектов, которые раньше были в TL, работают хуже, глядя на тот jackson, который добавил BufferRecyclerPool(для loom-friendly).

29 ответов

89 просмотров

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

Ilya-Starchenko Автор вопроса
Max
Дорого копировать между огромным количеством тредо...

Посмотрите на то, как сделаны ScopedValues. Это линкед-лист в поле потока.

Ilya Starchenko
Посмотрите на то, как сделаны ScopedValues. Это ли...

Он immutable, по этому просто шарится как общий ресурс

Ilya-Starchenko Автор вопроса

So what? Иммутабельная мапа. Это ничего не объясняет.

Ilya Starchenko
So what? Иммутабельная мапа. Это ничего не объясня...

Там очень ограниченный скоуп это легко контролить и прибирать

Ilya-Starchenko Автор вопроса
Max
Там очень ограниченный скоуп это легко контролить ...

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

Ilya Starchenko
Мапа TL и объект на SV лежат буквально в одном мес...

О каких проблемах ты говоришь? Дай контекста хоть

Ilya-Starchenko Автор вопроса
Max
О каких проблемах ты говоришь? Дай контекста хоть

Ну проблему я в изначальном сообщении подсвечивал, пулы объектов, тот же джексон много чего кэширует, как и все http-сервера. Но мне больше интересна изначальная мотивация заменить TL на сущность, которая мало чем отличается от TL.

Ilya Starchenko
Ну проблему я в изначальном сообщении подсвечивал,...

Никто не запрещает тебе юзать tl, просто на вирт тредах на большом количестве потоков это будет мягко говоря не эффективно. SV тоже поддерживают кеширования и прочие техники при надобности. См: java.lang.ScopedValue.cacheSize

Ilya-Starchenko Автор вопроса
Max
Никто не запрещает тебе юзать tl, просто на вирт т...

Давай еще раз, каким образом TL будет менее эффективен, когда SV и TL это два поля, которые лежат в поле потока? Не предназначен SV для буферов, это примерно везде говорится.

Тредлокал привязан к платформенному треду

Ilya-Starchenko Автор вопроса
Dima
Тредлокал привязан к платформенному треду

https://github.com/openjdk/jdk/blob/dc4bc4f0844b768e83406f44f2a9ee50686b1d9d/src/java.base/share/classes/java/lang/Thread.java#L302 Они в одном месте находятся.

Ilya Starchenko
Давай еще раз, каким образом TL будет менее эффект...

Максимально упрошу(для примера): что дешевле взять 1мб мутабельных данных и пошарь это на 1кк тредов копрованием. Или сделать тоже самое только просто раздавая реф на немутабельные данные. Выше тебе хорошее уточнение дали, что в у тебя ос тредов может быть 10, при этом поверх них вертеться будет 10лямов вирт. Цена доступа к данным показательна.

Ilya-Starchenko Автор вопроса
Max
Максимально упрошу(для примера): что дешевле взять...

Зачем ты повторяешь одно и то же? В чем принципиальная разница пошарить мапу и пошарить линкед лист? Мотивацию текущего перехода я понимаю, я не понимаю, почему изначально было принято решение о миграции, а не о доработки TL, так как принципиальной разницы в них нет.

Ilya-Starchenko Автор вопроса
Max
Раздел Motivation: https://openjdk.org/jeps/446

Ага, правда это никак не отвечает на мой вопрос, но спасибо.

Ilya Starchenko
Ага, правда это никак не отвечает на мой вопрос, н...

Очевидно, меняется контракт, поэтому решили добавить новую реализацию

Ilya Starchenko
О каком контракте идет речь?

Для TL установленное значение доступно для треда пока тот существует и может меняться. Для SV - значение не меняется и доступно в пределах выполнения метода run + наследование контекста. Очевидно, не получится просто заменить одну реализацию на другую

Ilya-Starchenko Автор вопроса
Alex Verkhoglyad
Для TL установленное значение доступно для треда п...

Ну так можно было в ThreadLocal добавить скоуп с наследованием. Такое чувство, что должна быть более объективная техническая причина, почему нельзя было потюнить TL.

Ilya Starchenko
Ну так можно было в ThreadLocal добавить скоуп с н...

Тогда нарушается обратная совместимость - там где раньше значение сохранялось, теперь оно будет зачищаться из-за добавленного скоупа. И да - значение должно стать иммутабельно

Ilya-Starchenko Автор вопроса
Alex Verkhoglyad
Тогда нарушается обратная совместимость - там где ...

Сделать скоуп опциональным, кажется, что в любом случае, это будет проще, чем смигрировать пол мира, который передает контекст через TL(от поддержки которого все равно не отказались).

Ilya Starchenko
Сделать скоуп опциональным, кажется, что в любом с...

Ну считай они его и сделали опциональным. Если нужен скоуп - SV, если в пределах треда - TL. Как мне кажется, это не из-за тех.проблем, а из-за разных концепций

Ilya-Starchenko Автор вопроса
Ilya Starchenko
Сделать скоуп опциональным, кажется, что в любом с...

Но если это действительно изначальная причина, то я просто не видел Бейтман или Рон Прейслер именно об этой причине говорят.

Ilya-Starchenko Автор вопроса
Alex Verkhoglyad
Ну считай они его и сделали опциональным. Если нуж...

Ну это разной сложности миграции, зачем вносить новую абстракцию, когда старая вполне успешно справлялась?

Ilya Starchenko
Ну это разной сложности миграции, зачем вносить но...

Ну, ты же видишь, что они по-разному работают

Ilya-Starchenko Автор вопроса
Alex Verkhoglyad
Ну, ты же видишь, что они по-разному работают

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

Ilya Starchenko
Ну это разной сложности миграции, зачем вносить но...

А что не напишешь на майлинг лист вопросы эти? Они обычно радостно на такое отвечают

Ilya-Starchenko Автор вопроса
Denis Pavlyuchenko
А что не напишешь на майлинг лист вопросы эти? Они...

Да как-то не хотелось флудить на дилетантские вопросы, вдруг кто уже видел обсуждение. Но начинаю склоняться к тому, чтоб действительно сходить.

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

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

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