powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / std::async
25 сообщений из 50, страница 1 из 2
std::async
    #39754480
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день эксперты (Тех кто очень хочет меня потролить и вспомнить былые разборки прошу тему не засорять)

Хочу задать вопрос по поводу std::async

Если я использую async policy гарантирует ли мне С++ что поток будет уничтожен после выполнения задачи ?

не будет ли у меня возникать утечка потоков ?

В документации ничего про это не нашел - но вижу слухи про это в ветках форума.
...
Рейтинг: 0 / 0
std::async
    #39755648
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen,

если вы не делаете ничего сверх убогого среднего (т.е. например не смешиваете компиляторы и рантаймы), то всё норм
даже если под капотом ваше творчество будет пул обслуживать, а не каждый раз поток создаваться
вам в принципе это должно быть фиолетово
...
Рейтинг: 0 / 0
std::async
    #39755749
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)semen.s.semen,

если вы не делаете ничего сверх убогого среднего (т.е. например не смешиваете компиляторы и рантаймы), то всё норм
даже если под капотом ваше творчество будет пул обслуживать, а не каждый раз поток создаваться
вам в принципе это должно быть фиолетово

Мне некоторые коллеги и тут на форуме говорят что std::async приводит к образованию неумирающих тредов зомби и как следствие текущим ресурсам

Это пустые страхи и бред или правда ?
...
Рейтинг: 0 / 0
std::async
    #39755754
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenМне некоторые коллеги и тут на форуме говорят что std::async приводит к образованию неумирающих тредов зомби и как следствие текущим ресурсам

Это пустые страхи и бред или правда ?и правда и не очень
Микрософт балуется пулами потоков, особенно это заметно в WinRT. Влупливают потоки и им всё скармливают через IOCPort. Вот и висят они в режиме ожидания. Из-за вытесняющей многозадачности проц они не жрут. С учётом хакерских возможнойстей МС по оптимизации не исключаю что и память они не жрут.

Из особенностей такой реализации:
скорее всего есть лимит на увеличение пула (можно проверить количество потоков задав ну скажем тысячу задач)

работает это быстрее, чем если бы каждый раз создавался поток
...
Рейтинг: 0 / 0
std::async
    #39755755
Фотография feature
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenМне некоторые коллеги и тут на форуме говорят что std::async приводит к образованию неумирающих тредов зомби и как следствие текущим ресурсам

Это пустые страхи и бред или правда ?
Неосиляторы, однако, сущие неосиляторы.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
std::vector< std::future<void> > futures;

for (int i = 0; i < 100500; ++i)
{
    auto fut = std::async( std::launch::async, cool_lambda );
    futures.push_back( std::move(fut) );
}

for (auto& r : futures)
    r.wait();

... [1] (бродят зомби завывая)
futures.clear();
... [2] (зомби нет уже нигде)


Потенциально в точке [1] могут быть замечены некоторые особи использованных и никому не нужных тредов, существующих весьма непродолжительное время. Например, на случай повторного использования какими-то вероятными вызовами std::async(std::launch::async, ...) в дальнейшем.
В точке [2] может наблюдаться один зомби, из последнего созданного треда, если дальше идёт безусловное (100% исполняющееся):
Код: plaintext
1.
2.
3.
auto fut1 = std::async( std::launch::async, cool_lambda );
...
fut1.wait();

Наблюдается зомби в [2] потому что последний из созданных ранее тредов подвергается повторному использованию.
...
Рейтинг: 0 / 0
std::async
    #39755756
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
featureНеосиляторы, однако, сущие неосиляторы.


Я так понимаю это привычное российское хамство в мой адрес (говнарь не осилил красоту ДНК)

Поясните пожалуйста на какие академические статьи по С++ в разных платформах или на результаты каких экспериментов Вы ссылаетесь в ваших ответах

Иначе эту будет расценено как тупой грубый и необоснованный флуд.
...
Рейтинг: 0 / 0
std::async
    #39755761
Фотография feature
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реконструием состоявшийся диалог:

— Мне некоторые коллеги и тут на форуме говорят что std::async приводит к образованию неумирающих тредов зомби и как следствие текущим ресурсам

— Неосиляторы, однако, сущие неосиляторы.

— Я так понимаю это привычное российское хамство в мой адрес (говнарь не осилил красоту ДНК)

Желающий обидеться таки найдёт повод обидется, несмотря ни на что :) Хоть что с ним делай, хоть какую объективную конкретику ни приводи.
...
Рейтинг: 0 / 0
std::async
    #39755765
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenна какие академические статьи по С++ в разных платформах или на результаты каких
экспериментов Вы ссылаетесь в ваших ответах

MSDN CreateThread(): "Завершившийся поток существует пока не закрыт последний его хэндл."
man pthread_create(): "Завершившийся поток существует до join или detach."

Кривизна обёрток над этими вызовами - на совести их аффтаров.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
std::async
    #39755837
Фотография feature
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКривизна обёрток над этими вызовами - на совести их аффтаров.
А кривизна ли это? Может всё же нюансы жизненного цикла тредов или управления ими просто не расписаны в стандарте?
Там достаточно оптекаемо регламентированы аспекты работы std::async в случае std::launch::async стратегии/полиси.

А разработчик — это уже клиент-пользователь конкретного тулчейна и рантайма разных вендоров. Из собственных соображений выбирает какой вариант реализации ему больше подходит. Условно говоря, никто не заставляет ограничиваться libstdc++, можно взять ту же libc++, у которой есть поддержка multiple different threading models
...
Рейтинг: 0 / 0
std::async
    #39755843
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
featureDimitry SibiryakovКривизна обёрток над этими вызовами - на совести их аффтаров.
А кривизна ли это? Может всё же нюансы жизненного цикла тредов или управления ими просто не расписаны в стандарте?
При чем тут стандарт? Dimitry Sibiryakov про особенности реализации API работы с потоками в виндовсе и линуксе. Т.е. поток уже не работает, ресурсы не использует, но для ОС он еще существует.
...
Рейтинг: 0 / 0
std::async
    #39755846
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tпоток уже не работает, ресурсы не использует, но для ОС он еще существует.

И именно это и называется зомби-потоками. А что под этим словом подразумевал семён -
остаётся для меня загадкой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
std::async
    #39755855
Фотография feature
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tfeatureпропущено...
А кривизна ли это? Может всё же нюансы жизненного цикла тредов или управления ими просто не расписаны в стандарте?
При чем тут стандарт? Dimitry Sibiryakov про особенности реализации API работы с потоками в виндовсе и линуксе. Т.е. поток уже не работает, ресурсы не использует, но для ОС он еще существует.
Модератор: не забываем о вежливости
Нюансы реализации в ОС не имеют отношения к предмету обсуждения. Между пользователем std::async и реализацией в ОС находится вендор тулчейна и рантайма.
Полёт фантазии в творчестве вендора тулчейна регламентируется лишь С++ стандартом. И заканчивается там, где начинается так называемое Threading API у рантайма, который делал второй вендор.

А нюансы реализации тредов в ОС применимы лишь к тому, как именно вендор рантайма реализует некоторую парадигму-поведение, через ипользование системного API конкретной ОС, не более того. Поскольку элементарно даже самих по себе моделей многопоточности существует более чем одна штука https://en.wikipedia.org/wiki/Thread_(computing)#Models
...
Рейтинг: 0 / 0
std::async
    #39755858
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
featureНюансы реализации в ОС не имеют отношения к предмету обсуждения.
Количество потоков чем смотрим? Средствами ОС.
...
Рейтинг: 0 / 0
std::async
    #39755871
Фотография feature
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TfeatureНюансы реализации в ОС не имеют отношения к предмету обсуждения.
Количество потоков чем смотрим? Средствами ОС.
Читаем уже приводившееся о моделях и думаем ещё раз, прежде чем продолжать нести ахинею.
...
Рейтинг: 0 / 0
std::async
    #39755919
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
featureРеконструием состоявшийся диалог:

— Мне некоторые коллеги и тут на форуме говорят что std::async приводит к образованию неумирающих тредов зомби и как следствие текущим ресурсам

— Неосиляторы, однако, сущие неосиляторы.

— Я так понимаю это привычное российское хамство в мой адрес (говнарь не осилил красоту ДНК)

Желающий обидеться таки найдёт повод обидется, несмотря ни на что :) Хоть что с ним делай, хоть какую объективную конкретику ни приводи.

Ну то есть кроме утверждения о том что я обиделся - никакого объективного объяснения не будет ?

Я так и думал.

Флуд он и есть флуд.
...
Рейтинг: 0 / 0
std::async
    #39755921
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima Tпоток уже не работает, ресурсы не использует, но для ОС он еще существует.

И именно это и называется зомби-потоками. А что под этим словом подразумевал семён -
остаётся для меня загадкой.


Именно это семен и понимает

Зомби - ресурс отжираемый процессом (занятый для ОС) но при этом неиспользующийся самим процессом
...
Рейтинг: 0 / 0
std::async
    #39755922
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenИменно это семен и понимает

Значит условия их появления уже перечислены.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
std::async
    #39755934
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenDimitry Sibiryakovпропущено...

И именно это и называется зомби-потоками. А что под этим словом подразумевал семён -
остаётся для меня загадкой.


Именно это семен и понимает

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

PS Я бы разжевал почему, но тут все крутые, огрызаются при попытке объяснить им по-простому, поэтому гугл в помощь, копать отсюда 21778160
...
Рейтинг: 0 / 0
std::async
    #39755936
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСемен сам себе противоречит.


Поясните где ?
...
Рейтинг: 0 / 0
std::async
    #39755945
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenDima TСемен сам себе противоречит.


Поясните где ?
Dimitry SibiryakovMSDN CreateThread(): "Завершившийся поток существует пока не закрыт последний его хэндл."
man pthread_create(): "Завершившийся поток существует до join или detach."

Если процесс сам держит незакрытым хэндл завершившегося потока, то поток существует с точки зрения ОС. Но это не криминал, т.к. это несколько сотен байт для описания потока и никакой нагрузки на процессор.

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

Теперь переходим к оценке затрат на ждущий задание поток:
1. Процессор он не расходует. Совсем.
2. Память расходует, описание потока какое-то создается, стек 1 Мб. Если не углубляться и преувеличить, то максимум 2 Мб на поток.

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

PS На "зомби-потоки" не заморачивайся, там все оптимизировано, обрати внимание на твои данные в памяти, которыми потоки оперируют.
...
Рейтинг: 0 / 0
std::async
    #39755946
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tsemen.s.semenпропущено...


Поясните где ?
Dimitry SibiryakovMSDN CreateThread(): "Завершившийся поток существует пока не закрыт последний его хэндл."
man pthread_create(): "Завершившийся поток существует до join или detach."

Если процесс сам держит незакрытым хэндл завершившегося потока, то поток существует с точки зрения ОС. Но это не криминал, т.к. это несколько сотен байт для описания потока и никакой нагрузки на процессор.

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

Теперь переходим к оценке затрат на ждущий задание поток:
1. Процессор он не расходует. Совсем.
2. Память расходует, описание потока какое-то создается, стек 1 Мб. Если не углубляться и преувеличить, то максимум 2 Мб на поток.

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

PS На "зомби-потоки" не заморачивайся, там все оптимизировано, обрати внимание на твои данные в памяти, которыми потоки оперируют.


Я так и не понял где я себе противоречу

Цель в том чтобы  std::async не держал втихую под подушкой потоки - про которые в курсе только он
...
Рейтинг: 0 / 0
std::async
    #39755947
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenЦель в том чтобы  std::async не держал втихую под подушкой потоки - про которые в курсе только он
Чем они помешали? Цену создания потоков я уже описал выше, хочешь экономить на спичках - пиши свою обертку.

Как устроен std::async я не в курсе. То что самосоздается пул потоков это уже огромное счастье для С++. То что ты считаешь минусом - это огромный плюс, гигантский шаг в развитии С++. Спасибо за инфу. Постоянно не пишу на С++, поэтому не в теме новинок.
...
Рейтинг: 0 / 0
std::async
    #39755948
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКак устроен std::async я не в курсе

Ну собственно на этом ты мог и закончить

Все остальное про потоки и их стоимость я и без тебя знал.

Вопрос был не в том лох ли обидчевый Семен и не в том а не лох ли Семен потому что задает такой вопрос.

Вопрос был по экспертизе в работе std::async без троллинга и с документированным и аргументированным обоснованием.

Извиняюсь за прямоту.
...
Рейтинг: 0 / 0
std::async
    #39755950
Фотография feature
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТут все оптимально, но можно словить тормоз почти на порядок на ровном месте А какое отношение false sharing, размерность cache line и обеспечение cache coherence в родимой ccNUMA имеет к простаивающим тредам, удерживающих память под стэк и thread local storage?
...
Рейтинг: 0 / 0
std::async
    #39755951
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenВсе остальное про потоки и их стоимость я и без тебя знал.
Ну извини что еще раз подтвердил что чудес не бывает.
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / std::async
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]