【发布时间】:2013-12-06 21:51:43
【问题描述】:
我是这个概念的新手。这些是相同的还是不同的东西?有什么不同?我真的很喜欢能够同时运行两个进程的想法,例如,如果我有几个大文件要加载到我的程序中,我希望同时加载尽可能多的文件,而不是一次等待一个。并且在处理大文件时,例如 wav 文件,最好将其分解为多个块并一次处理多个块,然后将它们重新组合在一起。我想研究什么来学习如何做这种事情?
编辑:另外,我知道在多核处理器上使用多个内核适合这里的某个地方,但显然异步编程并不一定意味着您使用多个内核?如果没有多个内核可以利用,为什么要这样做?
【问题讨论】:
-
异步并不一定意味着多线程。同时加载多个文件可能不会为您节省任何时间,实际上可能会更慢,因为磁盘驱动器一次只能做一件事。您需要将文件的输入缓冲区增加到 64K 左右。一般来说,你了解这些东西的方式是获取一个教程并开始使用它。不过,我对 C++ 没有任何建议。
-
很难完全回答你的问题,因为有很多话要说,但是理解异步编程的一个好方法是编写一个使用多个线程和函数回调的程序。
-
如果我有多个内核,似乎在不同内核上以单独的块处理一个大文件肯定会提高性能。我可以用 std::thread 做到这一点吗?如果线程不是异步运行某些东西的唯一方法,那么还有哪些其他方法?
-
Scott Meyers 在他最新的 Effective Modern C++ 中有一节介绍 C++11 并发以及线程和任务使用之间的区别Item 35: Prefer task based programming to thread based
标签: c++ multithreading asynchronous