MQL中的异步和多线程编程 - 页 33

 
Roman:

我喜欢一切))不同的方法来理解,然后选择对我来说更有意义、符合要求的方法,这很简单。

整个世界都在用DLL工作,ICL的神奇之处在于只有一群认为它是最高能力的教派人士。
 
Yuriy Asaulenko:
整个世界都在用DLL工作,只有一群认为这是终极能力的教派人士在用MKL奇迹工作。

这很搞笑,我非常同意))))。
很好地去阅读手册并思考所提供的选项。
感谢所有真正不忽悠的人,提出各种解决方案。
现在有很多东西可以选择。

 
顺便说一句,这让我想起了一个老笑话。
国际医学大会。俄罗斯代表团的报告--"通过肛门切除扁桃体"。
我们读了它。随后是观众的提问。
- 我们钦佩俄罗斯外科的技术和成就。但是,为什么要通过后面的通道?
- 我们都是这样做的。
 
Vict:

我没有理解错,Futures和Async是只适用于C++的标准?
在C语言中不是有一个类似的库吗?

 
Roman:

我没有理解错,Futures和Async是只适用于C++的标准?
在C语言中不是有一个类似的库吗?

对。Cish std也有多线程支持https://en.cppreference.com/w/c/thread

ZS:你也可以读一读安东尼-威廉姆斯的《C++并发行动》一书。例如,在第9章中,他写到线程池。

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:

对。Cish std也有多线程支持https://en.cppreference.com/w/c/thread

HH:你也可以读一下安东尼-威廉姆斯的《C++并发行动》一书。例如,在第9章中,他写到线程池。

没有注意到页面底部的See also链接 ))
明白了,std::thread 是在C中,但std::async不是((

现在刚看完这本书))Parallel C++ programming in action, Anthony Williams.
这本书在附件中,
async从第四章开始,相当容易读。
而Kurt Ganteroth在他的《优化C++程序》一书中 声称,创建线程的成本是使用std::async的14倍。
这就是为什么我最初想 使用async,但我对C/C++中的线程也不是很了解。
因此,如果线程的成本较高,无论如何都会脱落使用。
但事实证明,在C语言中,std::async并不存在((


 
Roman:

没有注意到页面底部的See also链接 ))
明白了,std::thread 是在C中,但std:: async不是(
(
现在刚看完这本书))平行C++编程的实践,作者:Anthony Williams。
如果你有兴趣,这本书就在附件中,async从第四章开始,相当容易阅读。
而Kurt Ganteroth在他的《优化C++程序》一书中 指出,创建线程的成本是使用std::async的14倍。
这就是为什么我最初想 使用async,但我对C/C++中的线程也不是很了解。
因此,如果螺纹更贵,无论如何都不值得使用
但事实证明,在C语言中,
std:: async并不存在((

线程并不贵,它只是一个较低级的工具,你可以用它来做任何事情。你可以在 "昂贵的线程 "上制作你自己的简单线程池--一个小时的写作(或者采取现成的lib)。

创建线程比使用std::async要贵14倍。

如果Async里面有一个线程池,也许可以,但这并不总是这样https://stackoverflow.com/questions/15666443/which-stdasync-implementations-use-thread-pools。

因此,async是这样一个黑色的、不可控的盒子。我不劝你写自己的池子,如果你对异步感到舒服,也可以。

ZS: 有传言说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可以同步执行,有一个标志用于此。我认为pluses上的线程池很复杂,只有在极度必要的情况下才会写它。你最好看看夏普,看看那个线程池。

我还想推荐 "Scott Meyers: Efficient and Modern 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(经常被批评)。

不,不觉得是这样 ))))))但粗略的搜索也是,嗯,充满了麻烦。我在github上遇到了很多垃圾。但我对另一个问题感兴趣,是否有任何任务真正需要线程池?不只是创建一个线程,忘记它并等待它完成,而是像威廉姆斯描述的那样,直接把它汇集起来?如果我没记错的话,那里似乎是一个自动取款机的例子--什么任务可以证明这样的奇迹柔道?我还想不出这样的任务。你为什么不看看ThreadPool,那里的一切都已经完成了,有文档和例子。