@dlangru

Страница 456 из 719
Evgeny
13.03.2018
21:10:14
ну и во всех контекстах происходит, то о чем говорит Игорь

Igor
13.03.2018
21:10:21
как и __gshared наверное

Evgeny
13.03.2018
21:10:35
как и __gshared наверное
не наверное, а точно

Pavel
13.03.2018
21:10:36
ну и обычные глобальные переменные в общей памяти получается

Google
Evgeny
13.03.2018
21:11:02
ну и обычные глобальные переменные в общей памяти получается
нет, обычные глобальные и статические в TLS

локальные переменные всегда собственные не только для потоков, но и для любого вызова функции :), так как они на стеке (не в TLS)

65Мб на поток как-то сурово

Igor
13.03.2018
21:13:45
и это точно не стек?

Evgeny
13.03.2018
21:14:04
Я на своих серверах местами отрубаю memory overcommit. И что, оно начнет жрать реальные 64Мб

и это точно не стек?
не знаю, pmap пишет [anon]

ща проверим

Evgeny
13.03.2018
21:17:21
Но анонимные функции захватывают их адрес общий?
нет, они копируют их в свой контекст.

иначе это какие-то странные лямбды получаются, но есть исключения

Igor
13.03.2018
21:18:10
[anon] может быть и стек, я посмотрел сейчас процесс с тредами - там виден только один [stack], а где остальные?

Evgeny
13.03.2018
21:18:21
замыкания никак с многопоточностью не связаны

Pavel
13.03.2018
21:20:04
https://run.dlang.io/is/vDrP96

Google
Pavel
13.03.2018
21:20:11
buf=1

т.е. buf для всех тредов видна одна и та же.

Evgeny
13.03.2018
21:23:06
и это точно не стек?
нет это не стек. я принудительно уменьшил стек у создаваемых тредов до 64К, количество вирт. памяти уменьшилось незначительно

Igor
13.03.2018
21:24:11
ну возможно

Evgeny
13.03.2018
21:28:19
т.е. buf для всех тредов видна одна и та же.
в данном случае оно захватывает указатель на стековый фрейм

Pavel
13.03.2018
21:32:37
В общем у анонимных все очень коварно

https://run.dlang.io/is/9KRMae вот тут тоже указатель на одно и то же.

Evgeny
13.03.2018
21:33:31
да, именно так

Pavel
13.03.2018
21:37:24
Но при этом если вместо ubyte[] buf просто использовать ubyte buf то она везде нормально будет раскопирована и общего доступа не будет

Evgeny
13.03.2018
21:41:54
если несколько лямбд захватывают один и тот же инстанс переменной, то он будет общий

Pavel
13.03.2018
21:47:37
Ну этот пример ничего не показывает, там же аргумент по значению передается

Evgeny
13.03.2018
21:47:40
https://glot.io/snippets/ez53hkkr98

Pavel
13.03.2018
21:48:13
То есть понятно что будет свое

Вот для сравнения https://run.dlang.io/is/TwJWfv

две переменных везде вместе, но одна - динамический массив а вторая просто скаляр. И массив везде общий а скаляр нет.

Pavel
13.03.2018
21:58:47
Ну вот как видишь он общий почему то

В общем у меня уже моск кипит, завтра продолжу.

Evgeny
13.03.2018
22:01:15
это похоже на багу

Google
Evgeny
13.03.2018
22:01:37
стоило перенести инициализацию в статический конструктор и все починилось. https://run.dlang.io/is/P52VUG

впрочем нет, не бага

массивы очевидно разные, но указывают на один и тот же кусок памяти

Pavel
13.03.2018
22:03:07
как такое возможно? TLS должен и указатели подправить

И память видимо раскопировать

Evgeny
13.03.2018
22:04:40
https://run.dlang.io/is/E1kHZB

Pavel
13.03.2018
22:05:12
Ну так же не должно быть?

Evgeny
13.03.2018
22:05:35
как такое возможно? TLS должен и указатели подправить
переменные в TLS инициализируются дефолтными значениями. В твоем примере дефолтным значением оказался new ubyte[126];

Pavel
13.03.2018
22:06:02
то есть везде нули там)

Evgeny
13.03.2018
22:06:33
то есть везде нули там)
нет, содержимое не важно. Динамический массив - это фактически указатель

Pavel
13.03.2018
22:07:11
Так и что? Разве указатель должен сохраняться в TLS один и тот же?

Тогда для любого ссылочного типа TLS не работает?

Evgeny
13.03.2018
22:08:52
Так и что? Разве указатель должен сохраняться в TLS один и тот же?
сами указатели разные, но указывают они на одно и тоже

заменим динамический массив на статический и все становится ок https://glot.io/snippets/ez542b76eh

Тогда для любого ссылочного типа TLS не работает?
работает, просто нельзя его инициализировать прямо во ввремя декларации

потому что такая инициализация автоматически инициализирует переменные во всех потоках

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

я считаю, что в глобальном контексте нельзя инициализировать переменную результатом new

не должно компилироваться

Да, дешка полна говна

Google
Pavel
13.03.2018
22:11:46
Но спасибо я попробую это осилить

Evgeny
13.03.2018
22:17:39
Забавно, что классы он не дает так создавать, а вот с массивами косяк. https://glot.io/snippets/ez54bdhr6o

баг компилятора, я считаю

Pavel
13.03.2018
22:30:28
Да, недоделка

В общем теперь все сходится. Если создать в статическом конструкторе буфер в 128 мегабайт а потом наплодить 7 тредов, то программа сразу сжирает гиг настоящей памяти.

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

Evgeny
14.03.2018
04:30:15
это как раз не грабельки

если нужен общий массив для всех тредов, то __gshared

Admin
ERROR: S client not available

Pavel
14.03.2018
10:07:33
Это ты создал тему на форуме?)

Evgeny
14.03.2018
10:35:21
Ага

правда, походу, всем насрать :)

Pavel
14.03.2018
12:01:35
Дружелюбное сообщество, говорили они :(

Evgeny
14.03.2018
12:14:42
Дружелюбное сообщество, говорили они :(
Дружелюбное, просто тут тема затронута сложная, у большинства не хватает знаний понять, о чем речь. Мы тут с тобой вчера весь вечер ковыряли этот пример.

А так в Learn быстро отвечают на не сильно сложные вопросы.

Pavel
14.03.2018
12:16:11
Да я сам вчера полдня пытался понять не шизофрения ли у меня и почему перестало работать то что я всегда знал про Д. В итоге я решил что так оно и должно быть ?

Evgeny
14.03.2018
12:18:14
Дланг начал сбор пожертвований по-серьезному: https://forum.dlang.org/thread/ydqyffokwupxavqwxjfc@forum.dlang.org

уже собрали почти 400 баксов

Dark
14.03.2018
12:32:25
На что собирают?

Pavel
14.03.2018
12:33:53
Чтобы хоть как-то спонсировать людей которые контрибутят в D, а то щас все буквально на святой вере держится

Google
Pavel
14.03.2018
12:34:11
Ну Брайт может там у себя и зарабатывает в своей конторе

Dark
14.03.2018
12:35:43
А что, спонсоров у D вообще нет?

Pavel
14.03.2018
12:35:53
Да вроде как нет

Ну компания Брайта это основной спонсор я так понял

А так - чисто триумф идеализма )

Dark
14.03.2018
12:37:40
Ну идеальным D кажется только на первый взгляд

Oleg
14.03.2018
12:37:42
за 15 минут

Pavel
14.03.2018
12:38:19
Ну идеальным D кажется только на первый взгляд
Это да, причем то что у него есть фанатики в частности на хабре делает всю эту ситуацию только забавнее

Stanislav
14.03.2018
12:40:05
Ну идеального в реальном мире ничего нет. А что есть удобнее ди? Именно в плане языка, а не либ

Pavel
14.03.2018
12:40:28
Так языком же сыт не будешь

Что касается языка, именно его спеки, то она очень крута, тут особо не поспоришь

Денис
14.03.2018
12:44:00
На хабре интересная статья про ред вот с такой статистикой

http://redmonk.com/dberkholz/2013/03/25/programming-languages-ranked-by-expressiveness/

Я совсем не понял, что на графике (объясните кто-нибудь), но похоже D отсосал у плюсов

А вроде понял. На графике среднее кол-во строк в коммитах (This assumes that commits are generally used to add a single conceptual piece regardless of which language it’s programmed in), соответстенно, чем меньше строк в коммите, тем выразительнее язык.

Oleg
14.03.2018
12:49:10
имхо не совсем корректно сравнивать языки у которых огромный бэкграунд (используемые в работе почти везде) на подобе С++ и D

Pavel
14.03.2018
12:49:11
у Д видно что очень сильно разнится статистика

Oleg
14.03.2018
12:49:31
С++ используется внутри корпораций со стандартами кодирования

на D же в большем случае личные проекты

ну или по этим графикам можно сказать, что рефакторят люди на D с большим интересом)))

Страница 456 из 719