Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Но вот мне другое интересно, есть ли такие задачи, которые действительно требовали бы пула потоков? Не просто - создал поток - забыл и ждем, когда закончится, а именно пула, по типу того, как это у Уильямса описано? Там приведен пример, кажется банкомата, если я не путаю, а у нас какой задачей может быть оправдано такое чудо юдо. Я пока такой задачи не могу придумать. И почему тогда уж действительно не посмотреть на ThreadPool, где уже все сделано, документация есть, примеры есть.
Если честно, то пока сам не уловил особого смысла между std::async и пулом потоков, за исключением того, что std::async автоматически создаёт и удаляет поток для выполняемой задачи.
А для использования пула потока, нужно заранее знать количество используемых потоков в программе, и устанавливать это количество для пула явно.
Получается что пул потоков, статический по количеству потоков, хотя возможно это не так, не могу утверждать.
Но в книге Уильямс пишет, что пул потоков рекомендуется использовать когда есть очень много задач для выполнения в std::thread.
И возможно это не относится к std::async, пока не уловил до конца смысл.
А асинхронность очень востребована в сетевых решениях, и мульти символьных стратегиях, да и для нагруженных расчётов тоже полезно.
Но имея в стандарте std::async и std::promise, мне кажется в создании пула потоков нет необходимости.
Ещё возник вопрос по настройке проекта для dll.
Как избавиться от не используемых функций, которое автоматом тянуться компиляторами в dll зависимость?
Перепробовал уже разные среды разработок, и каждая из них тянет свою неиспользуемую функцию.
MSVS_2017 вообще тянет свои рантайм зависимости, от которых наверно не избавиться.
По этому перепробовал разные IDE, но они тоже тянут не используемые функции.
Как от них избавиться?
Если честно, то пока сам не уловил особого смысла между std::async и пулом потоков, за исключением того, что std::async автоматически создаёт и удаляет поток для выполняемой задачи.
А для использования пула потока, нужно заранее знать количество используемых потоков в программе, и устанавливать это количество для пула явно.
Получается что пул потоков, статический по количеству потоков, хотя возможно это не так, не могу утверждать.
Но в книге Уильямс пишет, что пул потоков рекомендуется использовать когда есть очень много задач для выполнения в std::thread.
И возможно это не относится к std::async, пока не уловил до конца смысл.
А асинхронность очень востребована в сетевых решениях, и мульти символьных стратегиях, да и для нагруженных расчётов тоже полезно.
Но имея в стандарте std::async и std::promise, мне кажется в создании пула потоков нет необходимости.
Так основной смысл async - это юзать пул потоков, избавиться от накладных расходов связанных с постоянным созданием/удалением потоков, если async это не делает, то грош ему цена.
Ну вообще, я об async слишком плоход думал, видимо. Простой тест показывает его как вполне адекватную вещь:
Видно, что для второй пачки заданий async использовал раннее созданные потоки, не стал создавать новых. Так что я не совсем заслужено его поливал, наверное.
Ещё возник вопрос по настройке проекта для dll.
Как избавиться от не используемых функций, которое автоматом тянуться компиляторами в dll зависимость?
Для mingw должна помочь опция -static со статик он перестает генерить pic
Более жёсткий тест async
Ну в общем да, нормально работает. Почему я о нём так плохо думал? Наверное кривые реализации на заре с++11 ...
ЗЫ: но надо отметить, что шибко тормозная async() c политикой lanch::async, если заменить на lanch::deferred (+ подождать завершиня заданий в конце первого цикла), то этот простой тест начинает работать в 30 раз быстрее !!! Вот и многопоточность )). Поэтому остаётся место для самодельного пула потоков, мне кажется, что можно сделать много быстрее стандартного.
Ещё возник вопрос по настройке проекта для dll.
Как избавиться от не используемых функций, которое автоматом тянуться компиляторами в dll зависимость?
Перепробовал уже разные среды разработок, и каждая из них тянет свою неиспользуемую функцию.
MSVS_2017 вообще тянет свои рантайм зависимости, от которых наверно не избавиться.
Более жёсткий тест async
Ну в общем да, нормально работает. Почему я о нём так плохо думал? Наверное кривые реализации на заре с++11 ...
ЗЫ: но надо отметить, что шибко тормозная async() c политикой lanch::async, если заменить на lanch::deferred (+ подождать завершиня заданий в конце первого цикла), то этот простой тест начинает работать в 30 раз быстрее !!! Вот и многопоточность )). Поэтому остаётся место для самодельного пула потоков, мне кажется, что можно сделать много быстрее стандартного.
Я не дочитал до конца и решил предложить Вам выполнить запуск с флагом deferred ))))) Логично, если такой тест выполняется быстрее, мне вообще представляется такой способ использования предпочтительнее, зачем ставить жесткие рамки. Хотел сказать спасибо за Вашу ссылку на Гит, с интересом посмотрел )) Очень понравилось, что там два варианта - с бустом и без.
Ещё возник вопрос по настройке проекта для dll.
Как избавиться от не используемых функций, которое автоматом тянуться компиляторами в dll зависимость?
Перепробовал уже разные среды разработок, и каждая из них тянет свою неиспользуемую функцию.
MSVS_2017 вообще тянет свои рантайм зависимости, от которых наверно не избавиться.
По этому перепробовал разные IDE, но они тоже тянут не используемые функции.
Как от них избавиться?
Я не дочитал до конца и решил предложить Вам выполнить запуск с флагом deferred ))))
Зачем нужен async() с флагом deferred? Я действительно не понимаю, не объясните?
Зачем нужен async() с флагом deferred? Я действительно не понимаю, не объясните?
А собственно почему бы про флаг не прочитать в документации? На https://en.cppreference.com . И примеры с обсуждением на stackoverflow.com. Я обычно эти источники информации использую, что и Вам советую.
А собственно почему бы про флаг не прочитать в документации? На https://en.cppreference.com . И примеры с обсуждением на stackoverflow.com. Я обычно эти источники информации использую, что и Вам советую.