Multithreading 一个进程中的多个线程是否与一个进程中的一个线程共享相同的执行时间?

Multithreading 一个进程中的多个线程是否与一个进程中的一个线程共享相同的执行时间?,multithreading,operating-system,context-switch,Multithreading,Operating System,Context Switch,例如,让我们假设在我的操作系统中,执行时间达到100μ后,上下文切换到另一个进程。此外,我的计算机只有一个处理器,可以执行一个线程 如果进程A只包含一个执行线程,进程B有四个执行线程,这是否意味着进程A中的线程将运行100μ,进程B也将运行100μ,但在上下文切换之前在每个线程之间分配执行时间 过程A:运行100μ 进程A中的线程1执行时间:100μ 过程B:运行100μ 进程A中的线程1执行时间:~25μ 进程A中的线程2执行时间:~25μ 进程A中的线程3执行时间:~25μ 进程A中的

例如,让我们假设在我的操作系统中,执行时间达到100μ后,上下文切换到另一个进程。此外,我的计算机只有一个处理器,可以执行一个线程

如果进程A只包含一个执行线程,进程B有四个执行线程,这是否意味着进程A中的线程将运行100μ,进程B也将运行100μ,但在上下文切换之前在每个线程之间分配执行时间

过程A:运行100μ

  • 进程A中的线程1执行时间:100μ
过程B:运行100μ

  • 进程A中的线程1执行时间:~25μ

  • 进程A中的线程2执行时间:~25μ

  • 进程A中的线程3执行时间:~25μ

  • 进程A中的线程4执行时间:~25μ
以上是正确的吗


此外,如果我有一个四核处理器,这会有所不同吗?如果我有一个四核处理器,这可能意味着每个线程可以在所有处理器上运行100μm吗?

这完全取决于您在每个线程的进程/处理中所做的事情。如果您尝试运行的进程可以从线程拆分中获益,例如,调用web服务进行处理(因为web服务可以一次接受多个调用,然后分别执行),那么没有。。。单线程的处理时间将比4个线程长,因为它是线性执行调用,而不是同时执行调用

另一方面,如果执行的进程/代码没有从线程拆分中获益,那么在单个内核上完成所有4个处理线程的时间将是相同的

但是,在大多数情况下,如果操作正确,将处理拆分为线程所需的时间应该比在单个线程上执行要少

在这种情况下,内核的问题不包括在内,除非您试图运行的线程数超过了一个内核所能处理的线程数。在这种情况下,操作系统将在单独的内核上运行额外的线程

这个链接更详细地解释了内核和超线程的情况。。。
无论进程所有权如何,线程开关始终处于相同的间隔。所以如果它是100微米,那么它总是100微米。当然,除非线程本身放弃执行。当这个线程再次运行时,事情变得复杂了

调度程序中设置了什么进程的优先级,假想的计算机和假想的操作系统使用什么样的调度算法?如果我们假设循环而没有优先级,会怎么样?假想的操作系统会调度吗进程或线程(如或)?如果线程是调度单元,那么将有5个线程接收100μ切片,每个线程由@lev kuznetsov回答。如果进程是调度单元,那么调度程序可以决定公平,并按照问题中的建议分配时间量。我试图弄清楚你在寻找什么,以及实际有用的可回答问题隐藏在哪里。试着搜索和阅读类似的问题,比如这个:为了补充,我也找到了这句话,谢谢。很抱歉问这个问题,但是你能不能详细说明一下“当这个线程再次运行时,事情会变得复杂”。这是否是因为某些调度程序对线程数较多的进程的处理方式不同于对线程数较少的进程的处理方式?何时安排上下文再次运行将取决于无数因素,如进程的良好值、进程是否集中在窗口服务器等。关于调度程序对进程是否公平的问题,不管它启动了多少线程,我真的不知道,但如果这会在上下文再次被调度时起到很大作用,我会感到惊讶。