Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C/C+中使用多核支持+;_C++_Multithreading_Boost_Parallel Processing - Fatal编程技术网

C++ 在C/C+中使用多核支持+;

C++ 在C/C+中使用多核支持+;,c++,multithreading,boost,parallel-processing,C++,Multithreading,Boost,Parallel Processing,我在书中看到有人说要使用多核处理器就要使用boostthread(使用多线程)库。通常线程对操作系统不可见。那么,我们如何确保多线程将支持多核的使用呢。Java线程和Boost线程之间有区别吗?操作系统也被称为“监督者”,因为它可以访问所有内容。因为它负责管理抢占式线程,所以它确切地知道一个进程有多少个线程,并且可以随时检查它们在做什么 Java可能会添加一层间接寻址()以使许多线程看起来像一个线程,具体取决于JVM和配置。Boost不这样做,而是只包装POSIX接口,该接口通常直接与操作系统内

我在书中看到有人说要使用多核处理器就要使用boostthread(使用多线程)库。通常线程对操作系统不可见。那么,我们如何确保多线程将支持多核的使用呢。Java线程和Boost线程之间有区别吗?

操作系统也被称为“监督者”,因为它可以访问所有内容。因为它负责管理抢占式线程,所以它确切地知道一个进程有多少个线程,并且可以随时检查它们在做什么

Java可能会添加一层间接寻址()以使许多线程看起来像一个线程,具体取决于JVM和配置。Boost不这样做,而是只包装POSIX接口,该接口通常直接与操作系统内核通信


大规模多线程应用程序可能会从合并线程中受益,因此准备运行的线程数与逻辑CPU内核数匹配。不过,将所有内容缩减为一个线程可能太过分了:v)和@Voo表示,绿色线程只是一种遗留技术。一个好的JVM应该支持真正的多线程;检查您的配置选项。在C++方面,有一些类似英特尔TBB和苹果GCD的库来帮助管理并行性。

< P>操作系统也被称为“监控器”,因为它可以访问所有的东西。因为它负责管理抢占式线程,所以它确切地知道一个进程有多少个线程,并且可以随时检查它们在做什么

Java可能会添加一层间接寻址()以使许多线程看起来像一个线程,具体取决于JVM和配置。Boost不这样做,而是只包装POSIX接口,该接口通常直接与操作系统内核通信



大规模多线程应用程序可能会从合并线程中受益,因此准备运行的线程数与逻辑CPU内核数匹配。不过,将所有内容缩减为一个线程可能太过分了:v)和@Voo表示,绿色线程只是一种遗留技术。一个好的JVM应该支持真正的多线程;检查您的配置选项。在C++方面,有一些库,比如英特尔TBB和苹果GCD,帮助管理并行性。< /P>操作系统是抢占线程的唯一提供者。Boost仅仅包装了POSIX。Java和Boost的区别在于语言;它们应该完成相同的目标。
通常线程对操作系统不可见
不确定您是从哪里想到这个想法的……”“通常线程对操作系统不可见”——不太确定。查找“绿色线程”与“本机线程”。并非所有线程都是绿色的。线程是在进程内运行的部分。操作系统只能看到进程。而不是流程内部的细节。那么,操作系统如何支持多线程呢?在java中,我曾尝试过多线程程序,但一次只运行一个线程。请避免在回执之间插入其他单词。操作系统是抢先线程的唯一提供者。Boost仅仅包装了POSIX。Java和Boost的区别在于语言;它们应该完成相同的目标。
通常线程对操作系统不可见
不确定您是从哪里想到这个想法的……”“通常线程对操作系统不可见”——不太确定。查找“绿色线程”与“本机线程”。并非所有线程都是绿色的。线程是在进程内运行的部分。操作系统只能看到进程。而不是流程内部的细节。那么,操作系统如何支持多线程呢?在java中,我曾尝试过多线程程序,但一次只运行一个线程。请避免将其他单词放在反勾之间。谢谢您的回答。英特尔TBB和苹果GCD是否依赖于硬件?如果是这样,我是否必须根据硬件平台进行编码?是否有任何方法可以独立使用并行处理硬件(任何C/C++内置库)?@Lahiru Intel TBB是合理的跨平台;我没有用过它,但它至少应该支持Windows、Mac和主流Linux。我不认为他们优化了AMD芯片,但它应该是好的。Apple GCD是仅限Mac的(好吧,仅限Darwin,但非Mac Darwin已经死了),它要求您使用Objective C.Lahiru进行编译,以添加到@Potatoswatter的优秀答案中。值得指出的是,现代多核CPU的体系结构严重受支持多线程进程的需求的影响。我们所知道的线程需要SMP硬件体系结构,这导致了复杂的事情,如QPI和Hypertransport。如果不需要支持SMP,现代CPU在体系结构上将更接近Transputer。因为他们是“假”SMP,因为他们现在真的是蒙在鼓里的NUMA。QPI和HyperTransport非常聪明!绿色线程的原因几乎只是简单性和避免依赖平台的行为。十多年来,没有一个生产JVM使用绿色线程——就性能而言,这从来都不是一场胜利。现在,你必须竭尽全力找到一个甚至支持它们的JVM。@Voo那么,如果JVM自己进行线程池来支持大规模多线程,那就不是所谓的“绿色线程”。这更有可能是OP遇到的问题,还是仅仅是个谜?谢谢你的回答。英特尔TBB和苹果GCD是否依赖于硬件?如果是这样,我是否必须根据硬件平台进行编码?是否有任何方法可以独立使用并行处理硬件(任何C/C++内置库)?@Lahiru Intel TBB是合理的跨平台;我没有用过它,但它至少应该支持Windows、Mac和主流Linux。我不认为他们优化了AMD芯片,但它应该是好的。苹果GCD是Mac版的(好吧,达尔文版的,但非Mac版的达尔文已经死了),需要你用Objective C.Lahiru进行编译,以添加到@Potatoswatter的优秀答案i中