什么是计算机的性能?
首先我们可以先思考一下,就在日常生活中当我们谈到计算机性能,指的是什么?这台电脑的性能更好,我们要知道,其实这种说法是可以继续展开的。按照计算机专业内的标准定义,性能指的是计算机系统完成有用工作的能力。
其实可以用一些更加具体的量化指标来衡量计算机的性能。
计算机性能的衡量
从计算机本身的属性出发
系统性能:指计算机系统整体运行的状况,比如硬件、软件、网络等方面。对于用户来说,我们可以使用Windows安全或任务管理器来检查系统性能,例如CPU占用率、内存使用量、磁盘空间等。
程序性能:指计算机执行特定程序或任务的效率和速度,比如运行游戏、视频剪辑,代码的编译过程。我们可以使用测试软件来评估,比如帧数、渲染时间、编译时间。
用户体验:指的是计算机给用户带来的感受和满意度,比如流畅度、稳定性、响应时间等。这里我们就可以非常主观来评判了。
从不同种类的计算机出发
个人计算机:这是我们大部分计算机普通用户的设备,对于这些用户群体,他们更加关心响应时间(response time),以及任务开始到完成的执行时间(execution time)。
大型数据中心:数据中心的管理员关注的吞吐量(throughput)和带宽(bandwidth)。
与计算机性能相关的概念
响应时间:指的是计算机系统从开始到完成一个任务所需要的时间。响应时间越短,用户体验越好。响应时间受到用户输入、程序复杂度、网络延迟等因素的影响。
吞吐量:这个名词在运输行业见的更多,在计算机系统也是一个道理,指的是计算机系统单位时间内处理的任务数量。吞吐量越高,生产力越高。吞吐量会受到CPU核心数、内存大小、硬盘速度等因素的影响。
执行时间:cpu执行一个程序所需要的时间,一个程序从运行到得到结果,是需要一定的时间的,最简单的,我们双击应用程序,从双击结束到程序在屏幕上显示出来的这段时间,就是执行时间。当然,执行时间会受到程序设计,编译优化和运行环境等因素的影响。
cpu核心数:指的是cpu包含的处理单元的数量。每个核心都有自己的ALU、控制单元和寄存器。核心数越多,cpu可以同时处理更多的指令。
时钟速度:指的是cpu每秒钟执行的时钟周期数。而时钟周期数指的是计算机两个振荡器脉冲之间的时间间隔。时钟速度用赫兹、兆赫兹、千兆赫兹来衡量。
用代码体现响应时间这个概念
既然响应时间是指一个程序从开始到结束所需要的时间,那么我们可以写一个简单的有计算过程的程序,然后通过java中的一些方法,来输出这个程序运行全过程所用的时间,也就是响应时间。
import java.util.Scanner;
public class ResponseTime {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//创建一个Scanner对象用于从控制台读取用户输入
System.out.print("Enter a number: ");//先提示用户输入一个数字
long start = System.nanoTime();//获取当前时间,这里是以纳秒为单位
int n = sc.nextInt();//从控制台读取一个整数
boolean result = isPrime(n);//调用isPrime()方法,计算输入的整数是否是素数,并将结果存储到布尔变量中
long end = System.nanoTime();//获取当前时间,也是以纳秒为单位
long duration = end - start;//计算响应时间,以纳秒为单位
if (result) {
//如果isPrime的结果为true,那么就可以输出信息:输入的数字是一个素数
System.out.println(n + " is a prime number.");
} else {
//如果isPrime的结果为false,那么就可以输出信息:输入的数字不是一个素数
System.out.println(n + " is not a prime number.");
}
//输出响应时间
System.out.println("Response time: " + duration + " nanoseconds");
}
public static boolean isPrime(int n) {
if (n <= 1) return false;//如果n小于等于1,返回false
if (n <= 3) return true;//如果n小于等于3,返回true
if (n % 2 == 0 || n % 3 == 0) return false;//检查n是否能被2或者3整除
for (int i = 5; i * i <= n; i = i + 6)//检查n是否能被形如6k±1的数整除,k是整数
if (n % i == 0 || n % (i + 2) == 0)
return false;//如果n能被i或者i+2整除,返回false
return true;//如果n不能被以上的数整除,那么返回true,这时候说明n是一个素数
}
}
思考
这些概念当中,还有比较好着手验证的是带宽,读者可以思考一下如何用程序语言时间带宽的验算