我最近一直在阅读关于system architecture
的文章,而multi-threading
的主题并没有详细讨论最新的技术进步。我做了我的部分搜索,但找不到以下的答案:
问题是
1) multi-threading
依赖于system architecuture (CPU)
。所有的CPU (single core)
都支持multi-threading
吗?如果没有,那么在这些机器上运行multi-threaded
应用程序会发生什么?
引用这里的话说
Intel CPUs support multithreading, but only two threads per CPU.
AMD CPUs do not support multithreading and AMD often sites Microsoft's
recommendations to turn off Hyperthreading on Intel CPUs when running applications
like peoplesoft and Exchange.
2)那么,这里只说two threads per CPU
是什么意思呢?在任何给定的时间,CPU (single core)
只能处理thread
。而另一个thread
正在等待处理,对吗?
3)它与生成(比如10 threads
)并等待它们执行的应用程序有什么不同。如果CPU最多只能处理two threads
,那么程序员在编写multi-threaded applications
时不应该考虑这个事实。
即使使用multi-core processors (say quad-core)
最多只能处理8 threads can be queued
,但只能同时处理4 threads
。
P.S:我对hyper-threading
有一点了解,但我不确定这是否与此相关,以及是否所有处理器都支持hyper-threading
发布于 2014-01-16 19:05:35
1)它比任何事情都更依赖于操作系统。即使对于单个核心架构,多线程也是可以支持的,但是线程不是并行执行的--操作系统将在它们之间进行上下文切换。
2) Intel通常支持双向硬件线程(也称为同步多线程),其中每个线程都分配了一个管道。因此,如果进程有两个线程,它们都可以同时在同一核心上执行。
3)参见1。基本上,在计划在无法分配的线程之间切换上下文之前,操作系统将尽可能多地将线程分配给硬件。这个过程取决于操作系统的调度程序,您可以阅读Linux的调度程序,以了解正在发生的事情。
编辑:超线程基本上是我提到的硬件线程功能。
发布于 2014-01-17 15:57:38
在你的问题中,CPU意味着核心。
1)确实如此。我相信内存访问是用文字写的,所以写到字符也不是原子的,内存排序不同现代OSes (任何东西都不是OSes)支持上下文切换:当一个线程执行时,另一个线程等待。所有Windows进程中的线程总数约为1000个。普通时间量化(加载CPU的时间)为1-10毫秒.一个核心多线程不会提高计算能力,但允许异步任务。例如,GUI在网络活动期间不会冻结。一个线程等待网络,另一个线程响应用户活动。
2)是
( 3)线程数等于(虚拟)核数是常见的做法,即AMD系统中的内核数和Intel的两次内核数。它只适用于计算线程。Web服务器线程通常等待网络,并且不经常加载CPU,因此最好生成数千个线程。
超线程对于等待RAM的任务来说是很酷的。当一个线程等待数据时,另一个线程执行。对于数学来说,它通常不会提高性能。它有利于处理不对缓存友好的数据:不适合缓存的列表、树、哈希表。
https://stackoverflow.com/questions/21170539
复制相似问题