cpu时间

单CPU环境中如何实现多进程并行工作?

点点圈 提交于 2020-03-02 03:25:12
原创作品转载请注明出处 原创作者 ShenYue(沈乐) 实验日期 20160306 实验名称 完成一个简单的时间片轮转多道程序内核代码 实验来源 《 Linux 内核分析》 MOOC 课程 http://mooc.study.163.com/course/USTC-1000029000 操作系统单程序的函数调用使用的是 堆栈机制 , 通过 ebp esp eip 指针的进栈出栈来切换不同的栈帧 ( 执行上下文 ), 然而单 CPU 只能有唯一的执行流 , 多进程环境中不可能让单一进程 ” 独占 ” , 如何实现多进程并行工作 , 在其他进程使用 CPU 的时候可以 ” 抢占 ” 执行资源 ? 答案就是 interrupt( 中断机制 ). 下面是一个关于 时间片轮转的操作系统内核实验 , 由于 Linux 内核代码本身提供了预留的接口用于开发者定义自己的系统启动函数和时钟中断处理函数 , 所以简单地实际这样的函数来进行中断处理动作就可以模拟周期性地时间中断 ” 抢占 ” 系统启动进程的过程 . 登录实验楼的环境 , 其中已经事先安装好了 GCC 的运行环境 ,QEMU 硬件模拟环境和 Linux 内核编译源码 . 定义 my_start_kernel, 周期性地在内核态打印 my_start_kernel here 的字符串 . 定义timer interrupt的回调函数my

线程理论基础

风流意气都作罢 提交于 2020-03-01 18:05:04
一、进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据 加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等) 线程 一个进程之内可以分为一到多个线程。 一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行。 Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。 在 windows 中进程是不活动的,只是作为线程的容器 二者对比 进程基本上相互独立的,而线程存在于进程内,是进程的一个子集 进程拥有共享的资源,如内存空间等,供其内部的线程共享 进程间通信较为复杂 同一台计算机的进程通信称为 IPC(Inter-process communication) 不同计算机之间的进程通信,需要通过网络,并遵守共同的协议,例如 HTTP 线程通信相对简单,因为它们共享进程内的内存,一个例子是多个线程可以访问同一个共享变量 线程更轻量,线程上下文切换成本一般上要比进程上下文切换低 二、并行与并发 并发

多线程,协程,进程;并发,并行;异步;非阻塞;

时光总嘲笑我的痴心妄想 提交于 2020-03-01 15:35:34
进程: 是资源分配的最小单位; ² 调度由操作系统完成; ² 进程空间独立,数据安全性好,有专门的进程间通信方法 ² 进程的创建和删除要比线程消耗更多的计算机资源 ² 有独立的内存空间(上下文切换的时候需要保存栈、cpu寄存器、虚拟内存、以及打开的相关句柄等信息,开销大) 1、操作系统进行资源分配和调度的基本单位,多个进程之间相互独立 2、稳定性好,如果一个进程崩溃,不影响其他进程,但是进程消耗资源大,开启的进程数量有限制 线程: 是程序执行的最小单位(资源调度最小单位); ² 一个进程可以有多个线程,每个线程会共享父进程的资源(创建线程开销占用比进程小很多,可创建的数量也会很多) ² 线程的使用会给系统带来上下文切换的额外负担; ² 一个进程可以包含多个线程,线程共享进程的资源空间 1、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程可以共享该进程的所有资源 2、如果IO操作密集,则可以多线程运行效率高,缺点是如果一个线程崩溃,都会造成进程的崩溃 协程: ² 调度完全由用户控制; ² 一个线程(进程)可以有多个协程; ² 每个线程(进程)循环按照指定的任务清单顺序完成不同的任务(当任务被堵塞时,执行下一个任务;当恢复时,再回来执行这个任务;任务间切换只需要保存任务的上下文,没有内核的开销,可以不加锁的访问全局变量)

java 常见面试题

倖福魔咒の 提交于 2020-03-01 12:44:31
基本问题 基本数据类型和对象的区别 (1) 基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的栈上的,数据本身的值就是存储在栈空间里面,Java语言里面八种数据类型是这种存储模型; (2) 引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java堆和栈来进行这种类型的数据存储,简单地讲,“引用”(存储对象在内存堆上的地址)是存储在有序的栈上的,而对象本身的值存储在堆上的; 不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。 JAVA中的数据类型及其各自的特点。 分为基本类型和引用类型,基本类型有八个,数值型的有byte(1字节),short(2字节),int(4字节),long,float,double,布尔类型的bool和字符类型的char。引用类型有类,接口,数组。 JAVA面向对象的特征? 封装、继承、多态、抽象 封装:通过类来体现,将实体封装成类,其中包含属性和方法 继承:类与类之间可以继承特点,使得代码重用 多态:通过传递给父类对象引用不同的子类从而表现出不同的行为 抽象: 将一类实体的共同特性抽象出来

进程-线程-多线程-异步

蹲街弑〆低调 提交于 2020-03-01 06:58:07
进程-线程-多线程-异步 一、多线程的本质 1、并发多线程的启动、结束顺序 a、如何控制多线程的调用顺序 b、阻塞主线程等待子线程 二、异步操作的本质 三、线程 1、Thread 2、ThreadPool 3、Task 4、TaskFactory 5、Parallel 6、async await 语法糖 四、异常处理 五、线程取消 六、线程安全 一、多线程的本质 cpu的计算速度太快了导致硬件跟不上,就是木桶原理(盛水多少取决于最短板)。 cpu的计算能力很强,所以cpu可以分“时间片”,一个cpu可以分N+个时间片,每个时间片上跑一个线程(代码流)。cpu按顺序执行时间片,因为cpu太强,线程切换的太快,导致人感觉不出执行的卡顿,感觉上是多线程并发的。 微观角度:一个核同一时刻只能执行一个线程; 宏观角度: 是多线程并发的。 cpu分时间片执行线程,线程所需资源的不同会导致有 上下文的切换 ,其实上下文的切换会有性能的损失,但因为cpu计算能力超过其它硬件太多,不损失也是浪费。 扩展:4核8线程—核是物理的核,这里的线程是指虚拟核(一个核虚拟出2个核)。 1、并发多线程的启动、结束顺序 并发线程的启动是无序。 执行相同代码的并发线程的运行时间也不相同,所以结束时间也不同。 a、如何控制多线程的调用顺序 可以用委托提供的BeginInvoke方法,它是异步线程方法,并支持回调函数

C语言获取SYSTEMTIME

╄→尐↘猪︶ㄣ 提交于 2020-03-01 04:55:10
C语言中如何获取时间?精度如何? 1 使用time_t time( time_t * timer ) 精确到秒 2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒 3 计算时间差使用double difftime( time_t timer1,time_t timer0 ) 4 使用DWORD GetTickCount() 精确到毫秒 5 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒 6 要获取高精度时间,可以使用 BOOLQueryPerformanceFrequency(LARGE_INTEGER lpFrequency) 获取系统的计数器的频率 BOOLQueryPerformanceCounter(LARGE_INTEGER lpPerformanceCount) 获取计数器的值 然后用两次计数器的差除以Frequency就得到时间。 7 Multimedia Timer Functions The following functions areused with multimedia timers. timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime // ************************

GreenPlum简单性能测试与分析

你。 提交于 2020-02-29 22:36:10
版权声明:本文由黄辉原创文章,转载请注明出处: 文章原文链接: https://www.qcloud.com/community/article/195 来源:腾云阁 https://www.qcloud.com/community 如今,多样的交易模式以及大众消费观念的改变使得数据库应用领域不断扩大,现代的大型分布式应用系统的数据膨胀也对数据库的海量数据处理能力和并行处理能力提出了更高的要求,如何在数据呈现海量扩张的同时提高处理速度和应用系统的可用性,使客户能同时得到更高的处理速度、更高的数据可用性和更大的数据集,是数据库系统面临的一个挑战。 通过TPC-H基准测试,可获得数据库单位时间内的性能处理能力,为评估数据库系统的现有性能服务水平提供有效依据,通过横向对比促进数据库系统的整体质量提升,能更好地在重大信息化工程中实现推广。 一.TPC-H原理简介 TPC-H是由TPC(Transaction Processing Performance Council)事务处理性能委员会公布的一套针对数据库决策支持能力的测试基准,通过模拟数据库中与业务相关的复杂查询和并行的数据修改操作考察数据库的综合处理能力,获取数据库操作的响应时间和每小时执行的查询数指标(QphH@Size)。 TPC-H基准模型中定义了一个数据库模型,容量可以在1GB~10000GB的8个级别中进行选择

【计算机组成原理】第一章、计算机系统概述

流过昼夜 提交于 2020-02-29 22:22:27
计算机性能指标 吞吐量 :表征一台计算机在某一时间间隔内能够处理的信 息量,单位是字节/秒(B/S)。 响应时间 :表征从输入有效到系统产生响应之间的时间度 量,用时间单位来度量,例如微秒(10-6S)、纳秒(10-9S)。 利用率 :表示在给定的时间间隔内,系统被实际使用的时 间所占的比率,一般用百分比表示。 处理机字长 :指处理机运算器中一次能够完成二进制数运 算的位数。当前处理机的字长有8位、16位、32位、64位。  字长越长,表示计算的精度越高。 总线宽度 :一般指CPU中运算器与存储器之间进行互连的内 部总线二进制位数。 存储器容量 :存储器中所有存储单元的总数目,通常用KB、MB、GB、TB来表示。其中: K = 2 1 0 , M = 2 2 0 , G = 2 3 0 , T = 2 4 0 , B = 8 位 ( 1 个 字 节 ) K=2^10,M=2^20,G=2^30,T=2^40,B=8位(1个字节) K = 2 1 0 , M = 2 2 0 , G = 2 3 0 , T = 2 4 0 , B = 8 位 ( 1 个 字 节 ) 存储器容量越大,记忆的二进制数越多。 存储器带宽 :存储器的速度指标,单位时间内从存储器读出的 二进制数信息量,一般用字节数/秒表示。 主频/时钟周期 :CPU的工作节拍受主时钟控制,主时钟不断 产生固定频率的时钟

linux的cpu性能评估

亡梦爱人 提交于 2020-02-29 21:56:22
linux的cpu性能评估 参考自:自学it网, http://www.zixue.it/ 。 (1)利用vmstat命令监控系统CPU [test@localhost ~]$ vmstat 2 3 #每2秒更新信息,统计3次 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 1661116 2132 122456 0 0 268 22 132 158 1 1 97 2 0 r 表示运行和等待cpu时间片的进程数,这个值如果长期大于系统CPU的个数, 说明cpu不足,需要增加cpu。 b表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。 us表示用户进程消耗的cpu时间百分比,如果长期大于50%,就需要考虑程序或算法。 sy表示内核消耗的cpu时间百分比,如果较高,说明内核消耗cpu资源很多。 根据经验,us+sy的参考值大于80%,说明可能存在CPU资源不足。 (2)利用sar命令监控系统cpu。 sar -u 3 5 #显示系统所有cpu在采样时间内(每隔3秒,统计5次)的负载状态 [test@localhost /]$ sar

系统性能--CPU

主宰稳场 提交于 2020-02-29 21:55:15
对于cpu,目前比较关心的是cpu的利用率还有cpu的load,或者还有cpu运行队列。 cpu利用率 cpu利用率分为sys,us。分别为操作系统和用户进程所占用的cpu利用率。sys的占用,一般是进行内核操作,比如线程的调度,网络请求等操作。cpu利用率是指一段时间内,对cpu占用的时间比。比如30% ,如果是已1m为单位统计的,就是说1m内有60*0.3s的cpu占用。 通常来说,cpu利用率是越高越好,因为这意味着cpu资源可以充分被利用,计算任务可以快速被计算完成。当然这不是绝对的,也有可能是程序有问题,在空吃cpu,所以还是需要具体分析cpu到底在执行什么任务。放在线上服务的场景下,也并不意味着我们要把cpu的利用率达到很高,因为这意味着空闲cpu资源很少,如果线上有大的请求波动的话,会造成故障。 cpu的空闲可能有三个原因造成: 1. 线程在等待外部资源,比如网络返回。 2.线程被阻塞,比如在等锁的释放等。 3.线程真的很闲 查看cpu利用率方法:top , vmstat 1, top -p pid -H (可以查看一个进程下的线程的cpu占用) cpu Load cpuLoad是指一段时间内,cpu正在处理和等待处理的任务的总和(我认为至少不是进程维度的)。 一般来说,cpu的load不宜过大,最大不应该操作系统的内核数(逻辑cpu数, 逻辑cpu数=物理CPU个数