co_await c++20

Тема в разделе "LANGS.C", создана пользователем superakira, 13 мар 2018.

Статус темы:
Закрыта.
  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Не знал что ты следишь за тем, что и в каком объеме я читаю :)

    PS. Догадываюсь что ты даже не понял о чем мы.
     
  2. superakira

    superakira Guest

    Публикаций:
    0
    std::async - поведение для него описано в стандарте (это на счет того что она там создает под капотом и когда).
    опять тут за меня думают :) что и как я читаю :)
    если про то что мы с дэном обсуждали - то ты действительно не понял об чем речь.

    Блин.. Какая бы тема не всплыла - все в срач превращается) одно радует я клерка в игнор поставил (ибо дичь несет и утомил) и стало чутка приятнее васм читать.

    А так всем добра парни, давайте полайтовее!)
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.551
    Адрес:
    Russia
    superakira,
    Согласен. Вместо обсуждения стандарта скатилось все в меряние пи...

    а вам персональное предупреждение
     
  4. CurryHowardIsomorphism

    CurryHowardIsomorphism Member

    Публикаций:
    0
    Регистрация:
    13 май 2017
    Сообщения:
    97
    Запущено 100 async-ов с policy=launch::async.
    Сколько тредов будет создано?
     
  5. im.

    im. Active Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    310
    CurryHowardIsomorphism, прикол в том, что все это дело очень хорошо инкапсулировано, смотри
    https://stackoverflow.com/questions...arting-new-threads-with-stdlaunchasync-policy
    Так как дизайн std::async не подразумевает исключения, то если нет возможности создать 100 тредов, то он не создаст 100 тредов, однако работа будет выполнена тогда, когда будет возможность. Существует понятие очередей и пулов в различных реализациях. Поэтому код более стабилен при нехватке ресурсов, на слабых системах он будет лагать, но не падать, в случае с std::thread вылетят exception'ы.
     
  6. CurryHowardIsomorphism

    CurryHowardIsomorphism Member

    Публикаций:
    0
    Регистрация:
    13 май 2017
    Сообщения:
    97
     
  7. CurryHowardIsomorphism

    CurryHowardIsomorphism Member

    Публикаций:
    0
    Регистрация:
    13 май 2017
    Сообщения:
    97
    https://wandbox.org/permlink/F9nHHqJEqiiVGTLG
    Код (C):
    1. #include <chrono>
    2. #include <future>
    3. #include <iostream>
    4. #include <thread>
    5. #include <vector>
    6.  
    7. int main()
    8. {
    9.     using namespace std::chrono_literals;
    10.  
    11.     std::vector<std::future<void>> futs;
    12.     int i;
    13.     try {
    14.         for (i = 0; i < 100500; i++)
    15.            futs.push_back(std::async(std::launch::async, [] { std::this_thread::sleep_for(1s); }));
    16.     } catch (...) {
    17.         std::cout << i << '\n';
    18.         throw;
    19.     }
    20. }
    Код (Text):
    1. terminate called after throwing an instance of 'std::system_error'
    2.   what():  Resource temporarily unavailable
    3.  
    4. 126
    5.  
    6. Aborted
     
  8. im.

    im. Active Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    310
    Код (C):
    1. #include <chrono>
    2. #include <future>
    3. #include <iostream>
    4. #include <thread>
    5. #include <vector>
    6. int main()
    7. {
    8.     using namespace std::chrono_literals;
    9.     int i;
    10.     try {
    11.         for (i = 0; i < 100500; i++)
    12.            std::async(std::launch::async, [] { std::this_thread::sleep_for(1s); });
    13.     } catch (...) {
    14.         std::cout << i << '\n';
    15.         throw;
    16.     }
    17. }
     
  9. CurryHowardIsomorphism

    CurryHowardIsomorphism Member

    Публикаций:
    0
    Регистрация:
    13 май 2017
    Сообщения:
    97
    im., ты тролль или просто клоун?
     
  10. im.

    im. Active Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    310
    CurryHowardIsomorphism,
    смешной тролль,
    стартуешь 100500 тредов принудительно без возможности распределения на отложенное выполнение в случае нехватки ресурсов, получаешь предсказуемый результат, и?

    std::async создан для решения проблемы нехватки ресурсов, за что отвечает флаг deferred в политике по умолчанию, там где требуется 100500 параллельных тредов, там используется std::thread и допустимы exception'ы, это физические ограничения накладываемые внешними факторами, четко оговорены эти тонкости, какой смысл спорить с очевидными вещами?

    давайте теперь ерундой страдать, разберем и такой пример тогда

    Код (C):
    1. #include <iostream>
    2. #include <vector>
    3. int main()
    4. {
    5.     std::vector<int> ints;
    6.     int i;
    7.     try {
    8.         for (i = 0; i < 0x7fffffff; i++)
    9.            ints.push_back(i);
    10.     } catch (...) {
    11.         std::cout << i << '\n';
    12.         throw;
    13.     }
    14. }
    Код (DOS):
    1. user@user-vbox:~$ ./test
    2. 536870912
    3. terminate called after throwing an instance of 'std::bad_alloc'
    4.   what():  std::bad_alloc
    5. Аварийный останов (сделан дамп памяти)
    std::vector не следует юзать...
     
  11. CurryHowardIsomorphism

    CurryHowardIsomorphism Member

    Публикаций:
    0
    Регистрация:
    13 май 2017
    Сообщения:
    97
    Нет, ты унылый тролль.

    Я не стартую 100500 тредов. Где хоть один std::thread?
    Я стартую "очень хорошо инкапсулированную" абстракцию, которая "не подразумевает исключения".

    Кто-то заявлял, что vector "не подразумевает исключения"?
     
  12. im.

    im. Active Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    310
    CurryHowardIsomorphism,
    Верно, ты стартуешь один из инвариантов инкапсулированной абстракции, этот инвариант идентичен std::thread с той разницей, что появляется еще std::promise в этом контексте.
    Технически и одного потока может не быть для запуска самого ПО, недавно я столкнулся именно с этой особенностью, в таком случае даже главный тред не создается. Такие ситуации не являются опровержением чего-либо. Поэтому говорить, что "не создает исключения" это говорить про дизайн и основной посыл типа, у которого может быть как минимум три модели поведения в зависимости от условий и две из них собственно и являются отличительной особенностью подхода std::async от подхода std::thread, поэтому говоря о std::async как о преимуществе перед std::thread речь идет именно об этих двух моделях, а не о той которая идентична std::thread в своем поведении, и любой здравомыслящий человек это понимает.

    Сказывается профессиональная деформация психики, все конструкторы в голове построены на excplicit'ах, если такие вещи не проходят по умолчанию :)))

    P.S. Зачем-то развел срач на додумках и недоговорках. Просто докажи, что std::async вызовет исключение с std::launch::deferred и тогда можно считать, что std::async ненадежный подход. Или о чем спор?
     
    Последнее редактирование: 22 мар 2018
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.551
    Адрес:
    Russia
    если вы пришли сюда потролить и вам все равно - то выход знаете где. Если вы хотите общаться - имейте уважение. Если вы не хотите никому ничего объяснять и пишете "мне лень объяснять\копипастить\искать пруфы" то зачем вообще вы пришли в этот тред? Это не хип.
     
  14. CurryHowardIsomorphism

    CurryHowardIsomorphism Member

    Публикаций:
    0
    Регистрация:
    13 май 2017
    Сообщения:
    97
    std::async без задания policy (что эквивалентно launch::async | launch::deferred) тоже валится, только с bad_alloc, после 2508 итераций.
    И вряд ли этот bad_alloc бросает вектор.

    Остаётся третья модель поведения: launch::deferred. Которая не имеет отношения к
    Так что пользы от async, кроме разве что программ размера хеллоуворлдов — нет.
     
  15. CurryHowardIsomorphism

    CurryHowardIsomorphism Member

    Публикаций:
    0
    Регистрация:
    13 май 2017
    Сообщения:
    97
    если ты про бесполезность std::async, то, ты не поверишь, предложение объявить его deprecated (и позже удалить) было и было отклонено. Но не по техническим причинам, а по политическим.
    После того, как я прочитал аргументы против объявления std::async deprecated, я невольно начал думать, что комитет — это сборище гламурных кис.
     
  16. CurryHowardIsomorphism

    CurryHowardIsomorphism Member

    Публикаций:
    0
    Регистрация:
    13 май 2017
    Сообщения:
    97
    Не имеет.
     
  17. im.

    im. Active Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    310
  18. superakira

    superakira Guest

    Публикаций:
    0
    wowowo take it easy bro! =) с возрастом мы все становимся обидчевее! может я тебя и не понял. не кипишуй)
    CurryHowardIsomorphism, спор просто не о чем. на счет твоего вопроса - ты и сам ответил и это написано как минимум у мс (на счет сепшенов если не может создать поток итд при таком ключе).
     
  19. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    im., ничего не могу сказать про async, т.к. не пользуюсь им за ненадобностью. CurryHowardIsomorphism конпелит GCC, а у тебя VC++. Они ведут себя по-разному, в том числе - по-умолчанию разные политики запуска (тестил ради любопытства). Кто из них прав - хз, не вникал.
     
  20. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    "Стандартная" библиотека, ага.
     
Статус темы:
Закрыта.