Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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++ 如何在Linux上生成真正并行的任务_C++_Linux_Multithreading - Fatal编程技术网

C++ 如何在Linux上生成真正并行的任务

C++ 如何在Linux上生成真正并行的任务,c++,linux,multithreading,C++,Linux,Multithreading,对不起,我的第一个问题。我不确定是不是第一个问这个问题,但我在任何地方都找不到答案 现代CPU采用了大量的多线程/内核,但Linux不能保证进程/线程在同一时间内物理运行(分时)。 我希望我的(C++)程序能够利用这个硬件:在继续主线程的同时生成小任务(更新散列、复制数据)。目标是更快地运行程序。由于产生一个500ns的任务并等待1ms来执行是没有意义的,所以我想(几乎)确定该任务将与主线程在同一时间执行 我找不到关于这个主题的任何论文或讨论,但我不确定是否正确搜索,我只是不知道这个东西将如何命

对不起,我的第一个问题。我不确定是不是第一个问这个问题,但我在任何地方都找不到答案

现代CPU采用了大量的多线程/内核,但Linux不能保证进程/线程在同一时间内物理运行(分时)。 我希望我的(C++)程序能够利用这个硬件:在继续主线程的同时生成小任务(更新散列、复制数据)。目标是更快地运行程序。由于产生一个500ns的任务并等待1ms来执行是没有意义的,所以我想(几乎)确定该任务将与主线程在同一时间执行

我找不到关于这个主题的任何论文或讨论,但我不确定是否正确搜索,我只是不知道这个东西将如何命名。 谁能告诉我: -这种并行(同时)执行的名称是什么? -这在Linux上可能吗(或者哪种操作系统提供这种服务)


谢谢

我意识到我的问题更多的是面向操作系统而不是面向编程,我应该在一个更合适的程序员网站上提问,这里:


感谢您的回答,他们让我进步了,更好地定义了我要找的东西。

我意识到我的问题更多的是面向操作系统而不是面向编程,我应该在更合适的程序员网站上提问,这里:


感谢您的回答,他们让我进步了,并且更好地定义了我要查找的内容。

您要查找的是Linux下的cpu线程关联和cGroup。它有很多复杂性,您需要试验您的特定需求

低延迟应用程序中的常见策略是将CPU资源单独分配给特定进程或线程。线程运行“热”,因此不会将CPU释放到任何其他进程,包括内核

反应器模式对该模型很有用。在热线程上设置一个队列,其他线程向该队列提供数据。队列本身可能是一个瓶颈,但这完全是另一种讨论。因此,在您的示例中,主(热?)线程将把事件写入其他热工作线程的队列中。某种集合事件将向主线程指示工作线程已完成

此策略仅适用于CPU受限的应用程序。如果您的应用程序是I/O绑定的,那么内核可能比自定义算法做得更好

要直接回答您的问题,是的,这在使用C/C++的Linux中是可能的,但它不是微不足道的

我的博客上有一些可能感兴趣的老文章


--Matt

您需要的是Linux下的cpu线程关联和cGroup。它有很多复杂性,您需要试验您的特定需求

低延迟应用程序中的常见策略是将CPU资源单独分配给特定进程或线程。线程运行“热”,因此不会将CPU释放到任何其他进程,包括内核

反应器模式对该模型很有用。在热线程上设置一个队列,其他线程向该队列提供数据。队列本身可能是一个瓶颈,但这完全是另一种讨论。因此,在您的示例中,主(热?)线程将把事件写入其他热工作线程的队列中。某种集合事件将向主线程指示工作线程已完成

此策略仅适用于CPU受限的应用程序。如果您的应用程序是I/O绑定的,那么内核可能比自定义算法做得更好

要直接回答您的问题,是的,这在使用C/C++的Linux中是可能的,但它不是微不足道的

我的博客上有一些可能感兴趣的老文章


--马特

你说得对。为一个很短的任务生成一个进程或线程是没有意义的。保证同时执行的“线程池”主要存在于嵌入式实时操作系统中,您可以在其中仔细控制线程调度。在标准Linux中找不到它,因为它使程序运行更慢(必须等待N个空闲内核,而不是立即运行),但没有提供任何有用的好处。谢谢。是的,在线程池的情况下,我仍然希望我的线程可以立即调度,这基本上意味着计算机没有其他事情要做(不太可能)。我觉得奇怪的是,在Linux上不可能同时运行至少两个线程。我知道如果没有N个物理线程,那么阻止进程调度不是一个好主意,但最好说“我需要N个线程,给我你能给的”。如果线程都安排在同一个核心上,那么它也有利于缓存。你是对的。为一个很短的任务生成一个进程或线程是没有意义的。保证同时执行的“线程池”主要存在于嵌入式实时操作系统中,您可以在其中仔细控制线程调度。在标准Linux中找不到它,因为它使程序运行更慢(必须等待N个空闲内核,而不是立即运行),但没有提供任何有用的好处。谢谢。是的,在线程池的情况下,我仍然希望我的线程可以立即调度,这基本上意味着计算机没有其他事情要做(不太可能)。我觉得奇怪的是,在Linux上不可能同时运行至少两个线程。我知道如果没有N个物理线程,那么阻止进程调度不是一个好主意,但最好说“我需要N个线程,给我你能给的”。如果线程都安排在同一个核心上,那么它也有利于缓存。谢谢Matt。你说得对。我读了你的博客。你是说,作为一个用户,可以将CPU资源专门分配给一个线程?是的,我说的是CPU受限的情况。我想挖得更深一点