作为一个程序员,线程,进程,协程这些是我们必须要掌握的最基础的知识,这就好比数学家必须要学习的基本几何原理一样,没有它们,我们在编程的世界里寸步难行。
并发和并行是我们经常听到的两个词,并发是指同一时间段运行多个程序,比如我们一边听歌,一边打字。而并行指的是同一时刻,强调的是同一个时间点并行运行,很显然,并行要求需要多核,而并发可以单核切换运行程序,由于cpu的高速运转,所以看起来并发很类似并行执行,但是本质上两者是不同的。
具有多个逻辑CPU内核并且可以物理上同时执行多条指令的计算机的处理器。计算机的“核心数”是计算机拥有的核心总数。计算机可能具有多个处理器,每个处理器可能具有多个核心;核心数是所有处理器上的核心总数。
可以通过同时在多个内核上运行来利用多核计算机的程序。通常,两倍的内核等于两倍的计算能力(对于支持多线程的程序),尽管某些问题受CPU使用率以外的因素的限制。这些问题将不会带来多线程带来的巨大收益。
有时程序需要在特定时间做特定的事情。比如我们有一个可见窗口的程序。该程序可能正在进行大量的后台数字运算,但是它仍然可以响应用户事件(例如单击按钮并调整其大小),这种情况可以通过异步处理来完成,异步处理将需要您的一个线程重复检查GUI工作是否间隔执行,暂停正在执行的操作以及处理GUI一段时间。许多事情都是通过这种方式完成的。
然而,处理它的另一种可能更好的方法是使用线程。我们不需要担心该程序在逻辑运算和GUI管理之间来回切换,操作系统将为您进行管理。即使只有一个内核,您仍然可以运行多个线程,并且操作系统将尽最大努力确保所有正在运行的进程中的所有正在运行的线程都能公平分配CPU时间。
首先两者本质上没有必然的联系,多线程可以运行在单核上,也可以运行在多核上。一个线程可以某一时间段在一个核心上运行,下一刻在另一个核心上运行。
线程是内核调度的最小单位。一个进程可以有多个线程,它们共同完成某个任务。线程是被包裹在进程中的,进程提供了线程运行的资源。
进程之间互不影响,一个进程挂掉,并不影响其它进程,然而一个进程内的一个线程出现问题 ,其它线程也无法正常运行。
CPU也叫内核,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。
CPU执行多个程序靠的是它的时钟,通过时钟中断,它可以在不同的程序之间切换,这样看上去,我们的程序就彷佛在并行执行。
超线程技术为CPU中存在的每个物理核心创建两个虚拟处理核心。物理核心为虚拟核心提供动力,然后虚拟核心承担任务处理的责任。每个虚拟内核都彼此相同,尽管两者都不像物理内核那么强大,但是当不启用HT时,它们合起来远远超过了物理内核的能力。这些虚拟内核的使用使CPU可以实时在内核之间委派任务。
由CPU密集型操作(例如同时运行两个苛刻的程序)创建的工作负载(该操作会降低单个物理核心的运行速度,而不论其原始功率如何)都会在处理器的虚拟核心之间分配利用HT技术。使用两个虚拟内核同时处理任务,处理时间更短,程序打开速度更快,并且在多任务处理期间您的计算机将保持更高的响应速度。简而言之,超线程可提高处理效率。
多核技术具有超线程技术的所有优点并且具有更多的优势。超线程技术为每个物理内核使用两个虚拟内核来更有效地处理任务,而多内核技术则增加了物理内核。由于单个物理核心比单个虚拟核心更强大,因此双核处理器比具有超线程的单核处理器更强大。许多较新的型号CPU是超线程和多核的,从而实现了更高的性能。