课堂上跑完同一段代码,同学之间的运行时间差异很大,很难有机会将不同型号的cpu放在一起直观的通过代码的运行时间进行比较,而这次无意间比较的结果也确实出乎我的意料。
参与对比的cpu:
Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
Intel(R) Core(TM) i7-10870H CPU @ 2.20GHz
Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz
Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
测试使用编译器:
IntelliJ IDEA2021
测试用代码:
public class Test {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder("");
long start = System.currentTimeMillis();
for (int i = 0; i < 30000; i++) {
builder.append(i);
long end = System.currentTimeMillis();
System.out.println("builder共耗时毫秒:" + (end - start));
System.out.println("---------------------------------");
String str = "";
long start1 = System.currentTimeMillis();
for (int i = 0; i < 30000; i++) {
str += i ;
long end1 = System.currentTimeMillis();
System.out.println("str共耗时毫秒:" + (end1 - start1));
参与对比的cpu
cpu型号
Intel(R) Core(TM)
综和排名
(数据来源:cup7网站)
str耗时
单位:毫秒
builder耗时
单位:毫秒
cpu核心代号
i7-10870H CPU @ 2.20GHz315top13611last13Comet Lake-S i7-9750H CPU @ 2.60GHz466340top13Coffee Lake-H Refresh i5-1135G7 @ 2.40GHz52523003Tiger Lake i7-10510U CPU @ 1.80GHz7847313Comet Lake i5-8265U CPU @ 1.60GHz8833545(3-7之间波动)Whiskey Lakei5-8250U CPU @ 1.60GHz904last163210Kaby Lake Refresh
统计结果如上表,新一代cpu的str加运算表现对比老一代着实离谱,同学们甚至怀疑用8代i5的同学作弊,但多名使用8代i5-8265u的同学都能印证str加运算的耗时确实在340-600间波动,以上测试都是在多次运行后取的代表值。
通常的说法是运行速度与电脑的整体性能有关,但新的cpu总归比旧的要有优势,这其中的缘由还需要深入了解才能有发现,初步猜测是与核心架构有关,未完待续。
(10 封私信) 英特尔11代i5-1135G7有那么拉胯不堪吗? - 知乎 (zhihu.com)
很难有机会将不同型号的cpu放在一起直观的通过代码的运行时间进行比较,而这次无意间比较的结果也确实出乎我的意料,以此为突破口,看看能否找到问题的答案。参与对比的cpu:Intel(R) Core(TM) i5-1135G7 @ 2.40GHz 2.42 GHzIntel(R) Core(TM) i7-10870H CPU @ 2.20GHz 2.21 GHzIntel(R) Core(TM) i5-8265U CPU @ 1.60GHz 1.80 GHzIntel(R) Core(TM)
Python的线程在多核情况下,由于GIL的存在,运行效率会比单核情况下还低,这个时候,可以通过设置运行Python代码的进程所在的CPU以提高线程的性能,达到和单核处理器时一致的性能。该代码从
https://pypi.python.org/pypi/affinity/0.1.0
修改而来,去掉了原代码中对pywin32的依赖。
C#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_InfoC#例子代码 A1021_CPU_
处理器可以进行指令级的并行,及多条指令同时进行运算,且是乱序的,即指令执行的顺序不一定与机器代码的顺序一致。主要由指令控制单元与执行单元构成,前者是对指令进行译码,并将指令传到执行单元与按顺序通过队列传到退役单元,在执行单元,指令的运算式乱序的,可同时处理大量指令,但不同数据间的数据相关限制了执行顺序,这种限制形成了关键路径。我们可以根据这个特征来提高程序的表现。
循环展开,可以在每次循环中,增加
1. 优化代码和算法
一定要先好好看看你的代码和算法。许多速度问题可以通过实现更好的算法或添加缓存来解决。本文所述都是关于这一主题的,但要遵循的一些一般指导方针是:
测量,不要猜测。 测量代码中哪些部分运行时间最长,先把重点放在那些部分上。
实现缓存。 如果你从磁盘、网络和数据库执行多次重复的查找,这可能是一个很大的优化之处。
重用对象,而不是在每次迭代中创建一个新对象。Python 必须清理你创建的每个对象才能释放内存,这就是所谓的“垃圾回收”。许多未使用对象的垃圾回收会大大降低软件速度。
尽可能减少代码中的迭代次数,特别是减少迭代中的操作次数。
避免(深度)递归。 对于
文章目录1.C++程序运行
速度与什么有关2.C++提升程序运行
速度的一些方法
1.C++程序运行
速度与什么有关
一个C++程序的运行,与许多因素相关。比如,硬件
CPU和内存,编译器等。
这里,主要是分析程序员可控值的影响因素,从
代码的层面分析。
代码和数据是程序的基本元素。因此,数据的类型和数据的处理是影响程序运行
速度的主要原因。
比如,选用哪种合适的数据类型(涉及到内存的存储和之后的运算);变量在内存上的分配方式如何(堆或者栈,静态或者动态);程序的处理逻辑如何(是否可以进一步优化,涉及到算法);
进程是操作系统资源分配的基本单位,每个进程都拥有独立的内存空间、文件描述符、网络连接等资源。线程则是进程中执行的最小单位,它共享进程的资源,但拥有独立的调度和执行栈。一个进程可以包含多个线程,它们共享进程的内存空间,但是各自拥有独立的执行栈和寄存器等。
CPU资源与进程和线程之间的分配关系是这样的:操作系统会将CPU的时间分配给各个进程和线程,每个进程和线程都会占用一定的CPU时间片。在多任务环境下,操作系统通过调度算法来决定分配给每个进程和线程的CPU时间片大小和顺序,以实现高效的资源利用和任务完成。
总的来说,进程和线程之间的关系是协同合作的,它们共同占用CPU资源,实现系统的并发执行。