cla*_*aws 43 multithreading multicore process
我很困惑,但以下线程清除了我的疑虑:
但它从硬件角度解决了查询问题.我想知道这些硬件功能如何映射到软件?
显而易见的一点是MultiProcessor(= Mutlicpu)和MultiCore之间没有区别,除了多核中所有cpus都驻留在一个芯片(die)上,而在多处理器中,所有cpus都在它们自己的芯片上并连接在一起.
因此,mutlicore /多处理器系统能够在"同一时间"执行多个进程(firefox,mediaplayer,googletalk)(不同于在单个处理器系统上切换这些进程的上下文)对吗?
如果它是正确的.到目前为止我很清楚.但是当多线程出现时会出现混乱.
MultiThreading"用于"并行处理.对?
cpu中的多线程涉及哪些元素?图?对于我来说,利用并行处理两个独立任务的能力,CPU的要求应该是什么?
当人们说线程的上下文切换时.我真的不明白.因为如果它的上下文切换线程然后它不是并行处理.线程必须"同时执行".对?
我的多线程概念是:考虑使用单个cpu的系统.当进程上下文切换到firefox时.(假设)firefox的每个选项卡都是一个线程,所有线程都严格同时执行.不像一个线程已经执行了一段时间,然后又一个线程已经采取直到上下文切换时间到达.
如果我在无法处理线程的处理器上运行多线程软件会发生什么?我的意思是cpu如何处理这样的软件?
如果到目前为止一切都很好,现在问题是多少线?它必须受硬件限制,我想?如果硬件只支持2个线程,我在我的进程中启动10个线程.cpu如何处理它?优点缺点?从软件工程的角度来看,在开发将由各种系统中的用户使用的软件时,那么我如何决定是否应该进行多线程处理?如果是这样,有多少线程?
min*_*ang 45
首先,尝试理解"过程"和"线程"的概念.线程是执行的基本单元:线程由操作系统调度并由CPU执行.进程是一种容纳多个线程的容器.
是的,多处理或多线程用于并行处理.更准确地说,是利用线程级并行性.
好的,多线程可能意味着硬件多线程(例如HyperThreading).但是,我假设您只是说软件中的多线程.从这个意义上说,CPU应该支持上下文切换.
通过时分,即使在物理上单个核心中也需要上下文切换来实现多任务.
假设有两个物理核心和四个非常繁忙的线程.在这种情况下,两个线程只是等待他们将有机会使用CPU.阅读一些与抢先操作系统调度相关的文章.
可以在并发中物理运行的线程数与逻辑处理器数相同.您正在询问操作系统文献中的一般线程调度问题,例如循环法.
我强烈建议您先学习操作系统的基础知识.然后继续讨论多线程问题.对于诸如上下文切换和调度等关键概念,您似乎仍然不清楚.这需要几个月,但如果你真的想成为计算机软件专家,那么你应该知道这些非常基本的概念.请带上任何OS书籍和演讲幻灯片.
Phi*_*eko 13
在同一核心上运行的线程在技术上并不是并行的.它们似乎只是并行执行,因为CPU在它们之间切换非常快(对我们来说,人类).这个开关就是所谓的上下文切换.现在,在不同核上执行的线程并行执行.大多数现代CPU具有许多内核,但是,大多数现代操作系统(Windows,Linux和朋友)通常执行更多的线程,这仍然会导致上下文切换.即使没有执行用户程序,仍然操作系统本身也会执行上下文切换以进行维护工作.
这应该回答1-3.
大约4:基本上,每个处理器都可以使用线程.它更像是操作系统的一个特征.线程基本上是:内存(可选),堆栈和寄存器,一旦被替换,你就在另一个线程中.
5:线程数很高,受OS限制.通常它高于普通程序员可以成功处理:)线程数由您的程序决定:
IO绑定了吗?
多个线程是一个进程内的独立命令“链”。从 CPU 的角度来看,线程或多或少类似于进程。每个线程都有自己的一组寄存器和自己的堆栈。
线程数可以多于 CPU 的原因是大多数线程并不总是需要 CPU。线程可以等待用户输入、从网络下载内容或写入磁盘。这样做时,它不需要 CPU,因此 CPU 可以自由执行其他线程。
在您的示例中,Firefox 的每个选项卡甚至可能有多个线程。或者他们可以共享一些线程。您需要一个用于下载,一个用于渲染,一个用于消息循环(用户输入),可能还有一个用于运行 Javascript。您无法轻松地将它们组合起来,因为在下载时您仍然需要对用户的输入做出反应。但是,下载线程大部分时间都处于休眠状态,即使在下载时它也只是偶尔需要 CPU,并且消息循环线程仅在您按下按钮时才唤醒。
如果您转到任务管理器,您会看到尽管有所有这些线程,但您的 CPU 使用率仍然很低。
当然,如果您的所有线程都执行一些数字运算任务,那么您不应该创建过多的线程,因为您不会获得性能优势(尽管可能会有架构优势!)。
但是,如果它们主要受 I/O 限制,则创建与您的架构所要求的一样多的线程。在不了解您的特定任务的情况下,很难给出建议。