Асинхронное и многопоточное программирование в MQL - страница 33

 
Roman:

Мне всё нравиться )) разные подходы понять, и потом выбрать тот что будет более мне понятен и соответствовать требованиям, всё просто.

С ДЛЛ работает весь мир, с чудесами МКЛ только группа сектантов, считающих это высшей компетенцией.
 
Yuriy Asaulenko:
С ДЛЛ работает весь мир, с чудесами МКЛ только группа сектантов, считающих это высшей компетенцией.

Улыбнуло, и не согласится с этим не могу )))
Ладно ушел курить мануалы и обдумывать предложные варианты.
Спасибо всем кто реально без флуда, подсказал различные решения.
Теперь есть из чего выбрать.

 
Вспомнился, кстати, старый анекдот.
Международный медицинский конгресс. Доклад российской делегации -"Удаление гланд через задний проход".
Прочитали. Далее вопросы из зала.
- Мы восхищены мастерством и достижениями российской хирургии. Но почему через задний проход?
- А мы все так делаем.
 
Vict:

Я правильно понимаю, что Futures и Async это стандарт только для C++ ?
А в языке С, нет ли подобной библиотеки ?

 
Roman:

Я правильно понимаю, что Futures и Async это стандарт только для C++ ?
А в языке С, нет ли подобной библиотеки ?

Правильно. В сишной std тоже есть поддержка многопоточности https://en.cppreference.com/w/c/thread

ЗЫ: ещё можно проштудировать книгу anthony williams "c++ concurrency in action". Например, в 9 главе он пишет thread pool.

Thread support library - cppreference.com
  • en.cppreference.com
If the macro constant is defined by the compiler, the header and all of the names listed here are not provided. Function names, type names, and enumeration constants that begin with either , , , or , and a...
 
Vict:

Правильно. В сишной std тоже есть поддержка многопоточности https://en.cppreference.com/w/c/thread

ЗЫ: ещё можно проштудировать книгу anthony williams "c++ concurrency in action". Например, в 9 главе он пишет thread pool.

Не заметил ссылку See also внизу страницы  ))
Понял, std::thread есть в С, но  std:: async нет ((
Сейчас как раз читаю эту книгу )) Параллельное программирование на С++ в действии, Энтони Уильямс.
Кому интересно книга в прикрепе, 
async начинается с 4 главы,  довольно легко читается.
А Курт Гантерот в своей книге Оптимизация программ на С++,  утверждает, что создание потоков в 14 раз дороже использования std::async.
Я изначально и хотел работать по технологии  async, но и не знал тонкостей про thread в С/С++, 
по этому если threads дороже, то в любом случае они отпадают для использования.
Но получается что в С, std:: async нет   ((


 
Roman:

Не заметил ссылку See also внизу страницы  ))
Понял, std::thread есть в С, но  std:: async нет ((
Сейчас как раз читаю эту книгу )) Параллельное программирование на С++ в действии, Энтони Уильямс.
Кому интересно книга в прикрепе, 
async начинается с 4 главы,  довольно легко читается.
А Курт Гантерот в своей книге Оптимизация программ на С++,  утверждает, что создание потоков в 14 раз дороже использования std::async.
Я изначально и хотел работать по технологии  async, но и не знал тонкостей про thread в С/С++, 
по этому если threads дороже, то в любом случае они отпадают для использования.
Но получается что в С, std:: async нет   ((

thread не дороже, это просто более низкоуровневое средство из которого можно слепить что угодно. Свой простейший пул потоков на "дорогих thread'ах"- час писанины (или взять готовую либу).

создание потоков в 14 раз дороже использования std::async.

Возможно, если внутри async пул потоков, но это не всегда так https://stackoverflow.com/questions/15666443/which-stdasync-implementations-use-thread-pools.

В итоге - async это такой чёрный, неконтролируемый ящик. Я вас не призываю писать свой пул, если с async комфортно, то отлично.

ЗЫ: доходили слухи, что async хотели выпилить из c++17.
Which std::async implementations use thread pools?
Which std::async implementations use thread pools?
  • 2013.03.27
  • KnowItAllWannabeKnowItAllWannabe 5,31455 gold badges3434 silver badges7676 bronze badges
  • stackoverflow.com
One of the advantages of using instead of manually creating objects is supposed to be that can use thread pools under the covers to avoid oversubscription problems. But which...
 

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

Рекомендовал бы еще "Скотт Мейерс.  Эффективный и современный C++". 2016 года, читается легко, как блокбастер. Прикрепил архив внизу. У него есть интересная глава про потоки. Да и вообще, Майерса нужно читать, потому что нужно )))

 
Andrei Novichkov:

А пул потоков на плюсах, по моему дело сложное и писать его имеет смысл в случае очень крайней необходимости.

Ну вы уж не усложняйте. Если так не хочется самому писать, то легко взять готовое, вот беглым поиском https://github.com/vit-vit/ctpl. И это что-то более менее предсказуемое в отличии от async (критикуют который очень часто).

vit-vit/CTPL
vit-vit/CTPL
  • vit-vit
  • github.com
More specifically, there are some threads dedicated to the pool and a container of jobs. The jobs come to the pool dynamically. A job is fetched and deleted from the container when there is an idle thread. The job is then run on that thread. A thread pool is helpful when you want to minimize time of loading and destroying threads and when you...
 
Vict:

Ну вы уж не усложняйте. Если так не хочется самому писать, то легко взять готовое, вот беглым поиском https://github.com/vit-vit/ctpl. И это что-то более менее предсказуемое в отличии от async (критикуют который очень часто).

Неа, не хочется )))))) Но беглым поиском тоже, ммммм, чревато. Мне на гитхабе много хлама попадалось. Но вот мне другое интересно, есть ли такие задачи, которые действительно требовали бы пула потоков? Не просто - создал поток - забыл и ждем, когда закончится, а именно пула, по типу того, как это у Уильямса описано? Там приведен пример, кажется банкомата, если я не путаю, а у нас какой задачей может быть оправдано такое чудо юдо. Я пока такой задачи не могу придумать. И почему тогда уж действительно не посмотреть на ThreadPool, где уже все сделано, документация есть, примеры есть.