原文 http://blog.csdn.net/qingchen191/article/details/20478651
一直以来有这样的疑惑,单核CPU适合多线程吗?是不是几个核的CPU开几个线程是最合适的?
今天就这一问题查了一些资料,现整理如下:
要说多线程就离不开进程,进程和线程的区别在这里就不详细说了,只将关键的几点:
a)进程之间是相互独立的,不共享内存和数据,线程之间的内存和数据是公用的,每个线程只有自己的一组CPU指令、寄存器和堆栈,对于线程来说只有CPU里的东西是自己独享的,程序中的其他东西都是跟同一个进程里的其他线程共享的。
b)操作系统创建进程时要分配好多外部资源,所以开销大。(这个跟操作系统有关,有人做过实验,window创建进程的开销大,linux创建进程的开销就很小。)
再来说一下CPU,在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。而现在多核CPU的情况下,同一时间点可以执行多个任务,具体到这个任务在CPU哪个核上运行,这个就跟操作系统和CPU本身的设计相关了。
我们假设一个极端的情况:在一台单核计算机上只运行2个程序,一个是我们的程序A,另一个是操作系统的程序B,每个程序是一个进程。单核CPU的时候,A和B在CPU上交替运行,具体的分配方式由操作系统来判断,我这里猜测应该跟A和B的线程数有关,因为线程是CPU级别的,如果A有5个线程,B也有5个线程,那么CPU分配给A和B的时间应该是1:1的;如果A增加到15个线程,CPU分配给A和B的时间应该是3:1的比例。所以此时如果A的线程数多,那么获得的CPU执行次数就多,处理的速度也就快了。以上假设的前提是:①A和B的优先级相同,②A和B都是只消耗CPU资源的程序。
如果相同的情况用一个双核的计算机来处理又会是什么结果呢?假设这个双核的计算机和操作系统比较傻,把A进程分配到核1上,B进程分配到核2上,那不管A有几个线程,都是用核1来处理,那么时间肯定是一样的。不过现实中应该不会有这么傻的CPU和操作系统吧。 所以赶紧还是会根据线程来进行处理,当A的线程比B多时,会占用核2来处理A的线程。
刚才说的是只消耗CPU资源的程序,但这样的程序在实际应用中基本上是没有的,总会有跟资源打交道的。比如读个文件,查个数据库,访问一个网络连接等等。这个时候多线程才真正体现出优势,在一个进程中,线程a去读文件,线程b去查数据库,线程c去访问网络,a先用一下CPU,然后去读文件,此时CPU空闲,b就用一下,然后去查数据库,……,相对于读文件、查数据库、访问网络来说CPU计算的时间几乎可以忽略不计,所以多线程实际上是计算机多种资源的并行运用,跟CPU有几个核心是没什么关系的。
相关推荐
高性能服务器CPU核数调整研究 本文研究的主要内容是高性能服务器CPU核数调整,旨在解决大型应用软件的许可管理问题。在实际应用过程中,由于许可占用导致应用效率降低的问题,论文通过对应用软件许可占用CPU核数的...
同时,对于多核处理器,了解CPU核心数对于优化多线程程序或者进行负载均衡计算非常关键。 标签中的"GetSy"可能是“GetSystem”的简写,强调了获取系统信息这一动作。在易语言中,除了`GetSystemInfo`,还有其他API...
- **总逻辑CPU数** = 物理CPU个数 × 每颗物理CPU的核数 × 超线程数 **示例:** 假设系统中有2个物理CPU,每个物理CPU有4个核心,并且开启了超线程技术,那么: - 总核数 = 2 × 4 = 8 - 总逻辑CPU数 = 2 × 4 × ...
文章目录一、名词解释二、查看CPU信息参考文献未看完的参考文献 一、名词解释 CPU(Central Processing Unit): 中央处理单元, ...cpu核数: 每颗物理CPU可以有1个或者多个物理内核,通常每颗物理CPU
根据 CPU 核心数和线程数选择合适的多线程策略;而了解 CPU 的指令集则有助于优化软件代码,使其更好地利用硬件特性。 总的来说,全面掌握 CPU 的各项参数是提升系统性能的关键步骤,无论是系统管理员还是开发者,...
ANSYS 多 CPU 并行计算设置 在本资源中,我们将讨论 ANSYS 多 CPU 并行计算设置的相关知识点。ANSYS 是一款常用的有限元分析软件,用于模拟和分析复杂的工程问题。然而,在进行大规模模拟时,ANSYS 需要占用大量的...
Java中的多线程技术是Java进阶学习的重要组成部分,它涉及到并发编程的理论与实践,旨在提高程序的执行效率和响应速度。以下是对多线程技术的详细解释: 1. **CPU调度算法原理** - **先来先服务(FCFS)**:按照...
在实际应用中,我们还需要考虑到多线程和实时性问题,可能需要定时更新CPU信息并提供给用户。此外,为了使代码更具可移植性,可以编写一个跨平台的接口,根据当前运行的操作系统选择合适的获取CPU信息的方法。 总结...
近在项目里面使用了多线程处理技术,... 2.1对于内核数这个来做下自己的说明,当时自己在做的时候,查看了一些对于使用cpu核数的文章 有些高手做了一些性能方面的测试,表示当核数叫多的时候,处理性能提升很好,
- 多核CPU能够同时处理多个任务,提高系统并行处理能力,降低任务等待时间,提升整体性能。 3. **脚本实现原理**: - 脚本可能通过监控`/proc/stat`文件获取CPU利用率信息,该文件提供了系统运行状态的实时统计...
在这个场景中,我们讨论的是一个使用易语言编写的源码,用于获取进程中CPU的占用率,甚至还能获取CPU的核心数量,这对于多线程编程和系统资源管理特别有帮助。 首先,我们需要理解什么是CPU占用率。CPU占用率是指...
标题中的“多核CPU测试工具(PI)”以及描述中提到的“CPU测试”和“多线程测试多核CPU的工具”暗示了我们要讨论的是针对计算机处理器性能进行评估的工具,特别是那些能够利用多核心处理器并行计算能力的测试软件。...
在实际应用中,针对高并发且任务执行时间短的业务,线程池线程数通常设置为CPU核数+1,以减少线程上下文切换的开销。对于并发不高但任务执行时间较长的情况,需要区分任务类型。如果是IO密集型,可以适当增加线程数...
并发:指的是任务数多于cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已) 并行:指的是任务数小于等于cpu核数...
线程池配置的大小可以根据服务器的性能和业务场景来确定,可以使用公式Y=N*((a+b)/a)来确定线程池的大小,其中,N:CPU核数,a:线程执行时程序的计算时间,b:线程执行时,程序的阻塞时间。 Java多线程优化方法及...
Load Average的计算是一个复杂的问题,需要考虑多个因素,包括CPU的数量、核数、系统的负载情况等。一般来说,Load Average小于CPU个数乘以核数乘以0.7是一个合理的标准。 Context Switch Rate的计算也需要考虑多...
例如,Superπ测试的是CPU进行单线程圆周率计算的能力,而wPrime则测试CPU进行多线程圆周率计算的能力。 CineBench R11.5是一个专业的3D绘图性能测试软件,通过渲染一段复杂的3D场景来评定CPU的性能。 FritzChess...
核心的增加显著提高了处理器的并发处理能力,使得多任务处理更加流畅,尤其在运行大型应用或进行多线程计算时表现突出。 虚拟化技术的兴起引入了vCPU(Virtual CPU,虚拟核心)的概念。vCPU是在虚拟化环境中模拟的...
多线程 目录 进程 进程的了解 线程 什么是线程 线程的组成 线程的创建 线程的状态 线程的方法 线程的安全问题 1.进程 1.1.进程的了解 简单的来说进程就是运行中的程序,简称为进程。 单核CPU在任意一个时间节点上,...
1. 多核与多线程:在CPU和GPU技术中,核数(核)是指处理器中可以并行执行指令的独立处理单元。多核指处理器内部有多个这样的处理单元,而多线程是指单个处理单元中能够同时处理多个指令序列的能力。作者提到,很多...