|
std::async
|
|||
---|---|---|---|
#18+
Добрый день эксперты (Тех кто очень хочет меня потролить и вспомнить былые разборки прошу тему не засорять) Хочу задать вопрос по поводу std::async Если я использую async policy гарантирует ли мне С++ что поток будет уничтожен после выполнения задачи ? не будет ли у меня возникать утечка потоков ? В документации ничего про это не нашел - но вижу слухи про это в ветках форума. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 12:35 |
|
std::async
|
|||
---|---|---|---|
#18+
semen.s.semen, если вы не делаете ничего сверх убогого среднего (т.е. например не смешиваете компиляторы и рантаймы), то всё норм даже если под капотом ваше творчество будет пул обслуживать, а не каждый раз поток создаваться вам в принципе это должно быть фиолетово ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2019, 12:33 |
|
std::async
|
|||
---|---|---|---|
#18+
kealon(Ruslan)semen.s.semen, если вы не делаете ничего сверх убогого среднего (т.е. например не смешиваете компиляторы и рантаймы), то всё норм даже если под капотом ваше творчество будет пул обслуживать, а не каждый раз поток создаваться вам в принципе это должно быть фиолетово Мне некоторые коллеги и тут на форуме говорят что std::async приводит к образованию неумирающих тредов зомби и как следствие текущим ресурсам Это пустые страхи и бред или правда ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2019, 22:04 |
|
std::async
|
|||
---|---|---|---|
#18+
semen.s.semenМне некоторые коллеги и тут на форуме говорят что std::async приводит к образованию неумирающих тредов зомби и как следствие текущим ресурсам Это пустые страхи и бред или правда ?и правда и не очень Микрософт балуется пулами потоков, особенно это заметно в WinRT. Влупливают потоки и им всё скармливают через IOCPort. Вот и висят они в режиме ожидания. Из-за вытесняющей многозадачности проц они не жрут. С учётом хакерских возможнойстей МС по оптимизации не исключаю что и память они не жрут. Из особенностей такой реализации: скорее всего есть лимит на увеличение пула (можно проверить количество потоков задав ну скажем тысячу задач) работает это быстрее, чем если бы каждый раз создавался поток ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2019, 23:31 |
|
std::async
|
|||
---|---|---|---|
#18+
semen.s.semenМне некоторые коллеги и тут на форуме говорят что std::async приводит к образованию неумирающих тредов зомби и как следствие текущим ресурсам Это пустые страхи и бред или правда ? Неосиляторы, однако, сущие неосиляторы. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Потенциально в точке [1] могут быть замечены некоторые особи использованных и никому не нужных тредов, существующих весьма непродолжительное время. Например, на случай повторного использования какими-то вероятными вызовами std::async(std::launch::async, ...) в дальнейшем. В точке [2] может наблюдаться один зомби, из последнего созданного треда, если дальше идёт безусловное (100% исполняющееся): Код: plaintext 1. 2. 3.
Наблюдается зомби в [2] потому что последний из созданных ранее тредов подвергается повторному использованию. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2019, 23:50 |
|
std::async
|
|||
---|---|---|---|
#18+
featureНеосиляторы, однако, сущие неосиляторы. Я так понимаю это привычное российское хамство в мой адрес (говнарь не осилил красоту ДНК) Поясните пожалуйста на какие академические статьи по С++ в разных платформах или на результаты каких экспериментов Вы ссылаетесь в ваших ответах Иначе эту будет расценено как тупой грубый и необоснованный флуд. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2019, 23:59 |
|
std::async
|
|||
---|---|---|---|
#18+
Реконструием состоявшийся диалог: — Мне некоторые коллеги и тут на форуме говорят что std::async приводит к образованию неумирающих тредов зомби и как следствие текущим ресурсам — Неосиляторы, однако, сущие неосиляторы. — Я так понимаю это привычное российское хамство в мой адрес (говнарь не осилил красоту ДНК) Желающий обидеться таки найдёт повод обидется, несмотря ни на что :) Хоть что с ним делай, хоть какую объективную конкретику ни приводи. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 00:43 |
|
std::async
|
|||
---|---|---|---|
#18+
semen.s.semenна какие академические статьи по С++ в разных платформах или на результаты каких экспериментов Вы ссылаетесь в ваших ответах MSDN CreateThread(): "Завершившийся поток существует пока не закрыт последний его хэндл." man pthread_create(): "Завершившийся поток существует до join или detach." Кривизна обёрток над этими вызовами - на совести их аффтаров. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 01:20 |
|
std::async
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovКривизна обёрток над этими вызовами - на совести их аффтаров. А кривизна ли это? Может всё же нюансы жизненного цикла тредов или управления ими просто не расписаны в стандарте? Там достаточно оптекаемо регламентированы аспекты работы std::async в случае std::launch::async стратегии/полиси. А разработчик — это уже клиент-пользователь конкретного тулчейна и рантайма разных вендоров. Из собственных соображений выбирает какой вариант реализации ему больше подходит. Условно говоря, никто не заставляет ограничиваться libstdc++, можно взять ту же libc++, у которой есть поддержка multiple different threading models ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 13:25 |
|
std::async
|
|||
---|---|---|---|
#18+
featureDimitry SibiryakovКривизна обёрток над этими вызовами - на совести их аффтаров. А кривизна ли это? Может всё же нюансы жизненного цикла тредов или управления ими просто не расписаны в стандарте? При чем тут стандарт? Dimitry Sibiryakov про особенности реализации API работы с потоками в виндовсе и линуксе. Т.е. поток уже не работает, ресурсы не использует, но для ОС он еще существует. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 13:45 |
|
std::async
|
|||
---|---|---|---|
#18+
Dima Tпоток уже не работает, ресурсы не использует, но для ОС он еще существует. И именно это и называется зомби-потоками. А что под этим словом подразумевал семён - остаётся для меня загадкой. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 13:50 |
|
std::async
|
|||
---|---|---|---|
#18+
Dima Tfeatureпропущено... А кривизна ли это? Может всё же нюансы жизненного цикла тредов или управления ими просто не расписаны в стандарте? При чем тут стандарт? Dimitry Sibiryakov про особенности реализации API работы с потоками в виндовсе и линуксе. Т.е. поток уже не работает, ресурсы не использует, но для ОС он еще существует. Модератор: не забываем о вежливости Нюансы реализации в ОС не имеют отношения к предмету обсуждения. Между пользователем std::async и реализацией в ОС находится вендор тулчейна и рантайма. Полёт фантазии в творчестве вендора тулчейна регламентируется лишь С++ стандартом. И заканчивается там, где начинается так называемое Threading API у рантайма, который делал второй вендор. А нюансы реализации тредов в ОС применимы лишь к тому, как именно вендор рантайма реализует некоторую парадигму-поведение, через ипользование системного API конкретной ОС, не более того. Поскольку элементарно даже самих по себе моделей многопоточности существует более чем одна штука https://en.wikipedia.org/wiki/Thread_(computing)#Models ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 14:42 |
|
std::async
|
|||
---|---|---|---|
#18+
featureНюансы реализации в ОС не имеют отношения к предмету обсуждения. Количество потоков чем смотрим? Средствами ОС. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 14:48 |
|
std::async
|
|||
---|---|---|---|
#18+
Dima TfeatureНюансы реализации в ОС не имеют отношения к предмету обсуждения. Количество потоков чем смотрим? Средствами ОС. Читаем уже приводившееся о моделях и думаем ещё раз, прежде чем продолжать нести ахинею. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 15:05 |
|
std::async
|
|||
---|---|---|---|
#18+
featureРеконструием состоявшийся диалог: — Мне некоторые коллеги и тут на форуме говорят что std::async приводит к образованию неумирающих тредов зомби и как следствие текущим ресурсам — Неосиляторы, однако, сущие неосиляторы. — Я так понимаю это привычное российское хамство в мой адрес (говнарь не осилил красоту ДНК) Желающий обидеться таки найдёт повод обидется, несмотря ни на что :) Хоть что с ним делай, хоть какую объективную конкретику ни приводи. Ну то есть кроме утверждения о том что я обиделся - никакого объективного объяснения не будет ? Я так и думал. Флуд он и есть флуд. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 18:16 |
|
std::async
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovDima Tпоток уже не работает, ресурсы не использует, но для ОС он еще существует. И именно это и называется зомби-потоками. А что под этим словом подразумевал семён - остаётся для меня загадкой. Именно это семен и понимает Зомби - ресурс отжираемый процессом (занятый для ОС) но при этом неиспользующийся самим процессом ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 18:17 |
|
std::async
|
|||
---|---|---|---|
#18+
semen.s.semenИменно это семен и понимает Значит условия их появления уже перечислены. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 18:27 |
|
std::async
|
|||
---|---|---|---|
#18+
semen.s.semenDimitry Sibiryakovпропущено... И именно это и называется зомби-потоками. А что под этим словом подразумевал семён - остаётся для меня загадкой. Именно это семен и понимает Зомби - ресурс отжираемый процессом (занятый для ОС) но при этом неиспользующийся самим процессом Семен сам себе противоречит. PS Я бы разжевал почему, но тут все крутые, огрызаются при попытке объяснить им по-простому, поэтому гугл в помощь, копать отсюда 21778160 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 19:26 |
|
std::async
|
|||
---|---|---|---|
#18+
Dima TСемен сам себе противоречит. Поясните где ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 19:29 |
|
std::async
|
|||
---|---|---|---|
#18+
semen.s.semenDima TСемен сам себе противоречит. Поясните где ? Dimitry SibiryakovMSDN CreateThread(): "Завершившийся поток существует пока не закрыт последний его хэндл." man pthread_create(): "Завершившийся поток существует до join или detach." Если процесс сам держит незакрытым хэндл завершившегося потока, то поток существует с точки зрения ОС. Но это не криминал, т.к. это несколько сотен байт для описания потока и никакой нагрузки на процессор. С другой стороны если есть желание запустить какой-то код в отдельном потоке, то создать поток это дорого, т.е. поток долго создается, что может просто похоронить весь выигрыш от запуска в отдельном потоке, поэтому желательно создать поток заранее и ждать в нем сигнал на исполнение нужного кода. Т.к. библиотека не может предсказать сколько сигналов будет, то лучше создать N потоков и в каждом ждать. N не меньше чем ядер проца. Теперь переходим к оценке затрат на ждущий задание поток: 1. Процессор он не расходует. Совсем. 2. Память расходует, описание потока какое-то создается, стек 1 Мб. Если не углубляться и преувеличить, то максимум 2 Мб на поток. Тут все оптимально, но можно словить тормоз почти на порядок на ровном месте PS На "зомби-потоки" не заморачивайся, там все оптимизировано, обрати внимание на твои данные в памяти, которыми потоки оперируют. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 20:10 |
|
std::async
|
|||
---|---|---|---|
#18+
Dima Tsemen.s.semenпропущено... Поясните где ? Dimitry SibiryakovMSDN CreateThread(): "Завершившийся поток существует пока не закрыт последний его хэндл." man pthread_create(): "Завершившийся поток существует до join или detach." Если процесс сам держит незакрытым хэндл завершившегося потока, то поток существует с точки зрения ОС. Но это не криминал, т.к. это несколько сотен байт для описания потока и никакой нагрузки на процессор. С другой стороны если есть желание запустить какой-то код в отдельном потоке, то создать поток это дорого, т.е. поток долго создается, что может просто похоронить весь выигрыш от запуска в отдельном потоке, поэтому желательно создать поток заранее и ждать в нем сигнал на исполнение нужного кода. Т.к. библиотека не может предсказать сколько сигналов будет, то лучше создать N потоков и в каждом ждать. N не меньше чем ядер проца. Теперь переходим к оценке затрат на ждущий задание поток: 1. Процессор он не расходует. Совсем. 2. Память расходует, описание потока какое-то создается, стек 1 Мб. Если не углубляться и преувеличить, то максимум 2 Мб на поток. Тут все оптимально, но можно словить тормоз почти на порядок на ровном месте PS На "зомби-потоки" не заморачивайся, там все оптимизировано, обрати внимание на твои данные в памяти, которыми потоки оперируют. Я так и не понял где я себе противоречу Цель в том чтобы std::async не держал втихую под подушкой потоки - про которые в курсе только он ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 20:14 |
|
std::async
|
|||
---|---|---|---|
#18+
semen.s.semenЦель в том чтобы std::async не держал втихую под подушкой потоки - про которые в курсе только он Чем они помешали? Цену создания потоков я уже описал выше, хочешь экономить на спичках - пиши свою обертку. Как устроен std::async я не в курсе. То что самосоздается пул потоков это уже огромное счастье для С++. То что ты считаешь минусом - это огромный плюс, гигантский шаг в развитии С++. Спасибо за инфу. Постоянно не пишу на С++, поэтому не в теме новинок. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 20:33 |
|
std::async
|
|||
---|---|---|---|
#18+
Dima TКак устроен std::async я не в курсе Ну собственно на этом ты мог и закончить Все остальное про потоки и их стоимость я и без тебя знал. Вопрос был не в том лох ли обидчевый Семен и не в том а не лох ли Семен потому что задает такой вопрос. Вопрос был по экспертизе в работе std::async без троллинга и с документированным и аргументированным обоснованием. Извиняюсь за прямоту. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 20:36 |
|
std::async
|
|||
---|---|---|---|
#18+
Dima TТут все оптимально, но можно словить тормоз почти на порядок на ровном месте А какое отношение false sharing, размерность cache line и обеспечение cache coherence в родимой ccNUMA имеет к простаивающим тредам, удерживающих память под стэк и thread local storage? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 20:39 |
|
|
start [/forum/topic.php?fid=57&fpage=15&tid=2017684]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 251ms |
total: | 395ms |
0 / 0 |