linux内核线程在cpu硬件线程上映射1:1还是m:n?

linux内核线程在cpu硬件线程上映射1:1还是m:n?,linux,multithreading,process,kernel,cpu,Linux,Multithreading,Process,Kernel,Cpu,例如,我在linux上有4个进程,每个进程包含5个pthread线程,我的cpu是i7 4C8H 问题: 1对于每个进程,是否限制其所有线程仅使用1个cpu线程?一个进程可以使用所有cpu核心/线程吗 2 linux内核是否为每个进程平均分配时间片如果它们都很忙,并且没有指定优先级,或者按照线程数分配时间片,那么进程的线程越多,时间片就越多 1一个进程可以轻松使用处理器上可用的所有内核/超线程,只需生成多个线程或进程,并使它们执行任何类型的计算,例如,无限循环。内核的调度程序通常会尝试将负载分散

例如,我在linux上有4个进程,每个进程包含5个pthread线程,我的cpu是i7 4C8H

问题:

1对于每个进程,是否限制其所有线程仅使用1个cpu线程?一个进程可以使用所有cpu核心/线程吗

2 linux内核是否为每个进程平均分配时间片如果它们都很忙,并且没有指定优先级,或者按照线程数分配时间片,那么进程的线程越多,时间片就越多


1一个进程可以轻松使用处理器上可用的所有内核/超线程,只需生成多个线程或进程,并使它们执行任何类型的计算,例如,无限循环。内核的调度程序通常会尝试将负载分散到所有可用资源上


2我不知道有一种机制可以为具有更多线程的进程分配更多的时间。我相信调度程序会将每个线程视为一个单独的可运行实体,并参与标准的时间切片舞蹈。特别是,Linux当前的调度程序非常努力地在所有进程/线程之间公平分配时间片,一个进程可以轻松地使用处理器上可用的所有内核/超线程,只需生成多个线程或进程,并使它们执行任何类型的计算(例如,无限循环)。内核的调度程序通常会尝试将负载分散到所有可用资源上


2我不知道有一种机制可以为具有更多线程的进程分配更多的时间。我相信调度程序会将每个线程视为一个单独的可运行实体,并参与标准的时间切片舞蹈。特别是,Linux当前的调度程序非常努力地在所有进程/线程之间公平分配时间片

1进程的线程可以在多个CPU/内核中并行运行。如果一次只能运行一个线程,那么多线程就不会那么有用了!默认情况下,内核可以并且将在任何可用的内核上调度线程。其他线程,即使是同一进程的一部分,在另一个内核上运行也没有区别

有一个cpuset系统,您可以在其中将线程锁定到可用内核的某些子集。您可能需要一个进程的所有线程在特定的内核上运行。请参阅pthread\u getaffinity\u np

2在Linux中,线程而不是进程是基本的调度实体。因此,是的,具有更多线程的进程将获得更大的CPU份额!您要询问的是PTHREAD_SCOPE_系统与PTHREAD_SCOPE_进程的关系请参阅PTHREAD_attr_setscope。Linux线程NPTL不支持后者。另请参阅pthread_setconcurrency,它在Linux上也不做任何事情,因为Linux是1:1


然而,Linux确实支持一个称为组调度的概念。将此作为在具有不同线程数的进程之间实现公平性的一种方法。

1进程的线程可以在多个CPU/内核中并行运行。如果一次只能运行一个线程,那么多线程就不会那么有用了!默认情况下,内核可以并且将在任何可用的内核上调度线程。其他线程,即使是同一进程的一部分,在另一个内核上运行也没有区别

有一个cpuset系统,您可以在其中将线程锁定到可用内核的某些子集。您可能需要一个进程的所有线程在特定的内核上运行。请参阅pthread\u getaffinity\u np

2在Linux中,线程而不是进程是基本的调度实体。因此,是的,具有更多线程的进程将获得更大的CPU份额!您要询问的是PTHREAD_SCOPE_系统与PTHREAD_SCOPE_进程的关系请参阅PTHREAD_attr_setscope。Linux线程NPTL不支持后者。另请参阅pthread_setconcurrency,它在Linux上也不做任何事情,因为Linux是1:1

然而,Linux确实支持一个称为组调度的概念。将其视为在具有不同线程数的进程之间实现公平性的一种方法