cpu时间

并发Bug之源有三,请睁大眼睛看清它们

会有一股神秘感。 提交于 2020-01-04 05:13:31
写在前面 生活中你一定听说过——能者多劳 作为 Java 程序员,你一定听过——这个功能请求慢,能加一层缓存或优化一下 SQL 吗? 看过中国古代神话故事的也一定听过——天上一天,地上一年 一切设计来源于生活,上一章 学并发编程,透彻理解这三个核心是关键 中有讲过,作为"资本家",你要尽可能的榨取 CPU,内存与 IO 的剩余价值,但三者完成任务的速度相差很大,CPU > 内存 > IO分,CPU 是天,那内存就是地,内存是天,那 IO 就是地,那怎样平衡三者,提升整体速度呢? CPU 增加缓存,还不止一层缓存,平衡内存的慢 CPU 能者多劳,通过分时复用,平衡 IO 的速度差异 优化编译指令 上面的方式貌似解决了木桶短板问题,但同时这种解决方案也伴随着产生新的 可见性,原子性,和有序性 的问题,且看 三大问题 可见性 一个线程对共享变量的修改,另外一个线程能够立刻看到,我们称为可见性 谈到可见性,要先引出 JMM (Java Memory Model) 概念, 即 Java 内存模型,Java 内存模型规定,将所有的变量都存放在 主内存 中,当线程使用变量时,会把主内存里面的变量 复制 到自己的工作空间或者叫作 私有内存 ,线程读写变量时操作的是自己工作内存中的变量。 用 Git 的工作流程理解上面的描述就很简单了, Git 远程仓库就是主内存,Git 本地仓库就是自己的工作内存

浅说CPU并行计算与GPU并行计算

China☆狼群 提交于 2020-01-04 05:05:44
最近在学一门课,叫做“C++与并行计算”。要用到多CPU(进程)并行的原理,实现语言是C++的MPI接口。联想到上学期用到CUDA C/C++来做并行计算,就对这两门语言做一个总结,分享下自己关于并行计算的认识。 1 并行计算的基本原理 并行计算一般有两个维度,一个是指令(Instruction)或程序(Program),另一个是数据(Data)。这样,就可以归纳出各种并行模式(S代表Single,M代表Multiple)。 除了SISD,其他几个都算是并行计算方法。这里重点介绍下SPMD。 SPMD是最简单的一种并行计算模式。SP意味着程序员只需写一份代码,MD意味着这些代码对不同的数据应该分别处理。而并行,则要求数据处理的过程要同时进行。通俗的讲,就是一份代码被复制了多份,然后每份代码单独跑一份数据,从而实现并行。这就引出了一个问题:数据是如何存储的? 1.1 数据的存储 数据的存储可以分为两大类:分布式存储和共享内存。 分布式存储意味着不同的进程/指令处理不同的数据,大家互相不干扰。基于多CPU的MPI并行计算接口用的就是这种思想。 共享内存则要求不同的进程/指令可以同时修改同一块数据。这样,进程之间的通信将变得简单。缺点是容易造成数据读写冲突而需要谨慎对待。基于GPU的CUDA C/C++并行计算就用到了这种方法。 2 MPI:多CPU并行计算

04、计算机功耗,提升性能

南笙酒味 提交于 2020-01-04 05:05:23
  CPU性能公式:程序的 CPU 执行时间 = 指令数×CPI×Clock Cycle Time 降低能耗 从以上公式看出,可以从指令数、CPI以及CPU主频这三个方面入手来提升计算机性能。然而当CPU的主频达到极限时,功耗会增加,导致性能不会达到预期的目的,一方面,我们要在 CPU 里,同样的面积里面,多放一些晶体管,也就是 增加密度 ;另一方面,我们要让晶体管“打开”和“关闭”.”得更快一点,也就是 提升主频 。而这两者,都会增加功耗,带来耗电和散热的问题。因此这两方面都是有限的。此时又会降低电压来降低能耗; 并行优化,阿姆达尔定律 提升主频达到了瓶颈之后,又通过并行处理来提高CPU的吞吐率,现代的CPU都发展到多核,2核、4核,乃至8核的CPU。这就是将一个程序任务交给多个CPU核进行并行处理来提高性能。阿姆达尔定律说的就是,对于一个程序进行优化之后,处理器并行运算之后效率提升的情况。可以用公式表示:           优化后的执行时间 = 受优化影响的执行时间 / 加速倍数 + 不受影响的执行时间 不受影响的执行时间就是不能被并行处理的任务所执行的时间。 总结延伸 无论是提升主频,还是增加更多的CPU核心数量,通过并行来提升性能,都会遇到瓶颈。简单的堆硬件已经不能满足需求了。 在摩尔定律和并行计算之外,还有这几个原则性的性能提升方法:   1、加速大概了事件    

转:更好的认识进程与线程

与世无争的帅哥 提交于 2020-01-04 05:02:35
文章转自:http://blog.csdn.net/z69183787/article/details/52910299 一、线程与进程的区别 先简单说说线程与进程的概念: (1)进程是指一个内存中运行的应用程序,比如在Windows系统中,一个运行的exe就是一个进程。 (2)线程是指进程中的一个执行流程。 区别: 一个程序至少有一个进程,而一个进程至少有一个线程。一个应用程序可以同时启动多个进程。例如对于IE浏览器程序,每打开一个IE浏览器窗口,就启动了一个新的进程。而线程则是指进程中的一个执行流程,一个进程可以有多个线程,每个线程分别执行不同的任务,当进程内的多个线程同时运行时,这种运行方式就被称为并发运行。 另外,线程与进程还有一个非常重要的区别:每个进程在执行过程中都拥有独立的内存单元,而同一个进程中的多个线程则共享内存,从而极大地提高了程序的运行效率。 二、对多线程并发的理解 多线程并发只是表面和感觉上的并发,并不是实质上的并发。一个线程要运行,它必须占有CPU,而我们目前用的计算机大多都是单CPU的,所以一次最多只能有一个线程获取CPU并运行。 多线程的实质是“最大限度地利用CPU资源”,当某一个线程的处理不需要占用CPU而只需要和I/O等资源打交道时,让其他线程有机会获得CPU资源。这有点类似于“统筹方法”,例如让你打扫房子和烧水,要在最短的时间内做好这两件事

线程,进程,多进程,多线程。并发,并行的区别与关系

半世苍凉 提交于 2020-01-04 04:49:49
一:线程与进程 1.概念 线程:是程序执行流的最小单元,是系统独立调度和分配 CPU(独立运行)的基本单位。 进程:是资源分配的基本单位。一个进程包括多个线程。 进程 ≥ 线程 2.区别: 1.线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。 2.每个进程都有自己一套独立的资源(数据),供其内的所有线程共享。 3.不论是大小,开销线程要更“轻量级” 4.一个进程内的线程通信比进程之间的通信更快速,有效。(因为共享变量) 二 .多线程与多进程 多线程:同一时刻执行多个线程。用浏览器一边下载,一边听歌,一边看视频,一边看网页。。。 多进程:同时执行多个程序。如,同事运行 YY,QQ,以及各种浏览器。 三 .并发与并行 并发当有多个线程在操作时 ,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。 并行:当系统有一个以上 CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。 以下为详细的概念的讲解 并发: 并发,在 操作系统 中

进程,线程和协程 并行与并发

喜欢而已 提交于 2020-01-04 04:45:13
一、进程 进程的出现是为了更好的利用CPU资源使到并发成为可能。 假设有两个任务A和B,当A遇到IO操作,CPU默默的等待任务A读取完操作再去执行任务B,这样无疑是对CPU资源的极大的浪费。聪明的老大们就在想若在任务A读取数据时,让任务B执行,当任务A读取完数据后,再切换到任务A执行。注意关键字切换,自然是切换,那么这就涉及到了状态的保存,状态的恢复,加上任务A与任务B所需要的系统资源(内存,硬盘,键盘等等)是不一样的。自然而然的就需要有一个东西去记录任务A和任务B分别需要什么资源,怎样去识别任务A和任务B等等。登登登,进程就被发明出来了。通过进程来分配系统资源,标识任务。如何分配CPU去执行进程称之为调度,进程状态的记录,恢复,切换称之为上下文切换。进程是系统资源分配的最小单位,进程占用的资源有: 地址空间 全局变量 文件描述符 各种硬件资源 相比线程和协程,进程是比较重量级的,它需要的资源很多。进程之间不共享内存变量,所以进程间的通信方式也多种多样: TCP REDIS等数据库 管道,文件等 二、线程 线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使得进程内并发成为可能。假设,一个文本程序,需要接受键盘输入,将内容显示在屏幕上,还需要保存信息到硬盘中。若只有一个进程,势必造成同一时间只能干一样事的尴尬(当保存时,就不能通过键盘输入内容

性能测试结果分析

∥☆過路亽.° 提交于 2020-01-04 02:46:24
性能测试 工程师基本上都能够掌握利用测试工具来作负载、 压力测试 ,但多数人对怎样去分析工具收集到的测试结果感到无从下手,下面我就把个人 工作 中的体会和收集到的有关资料整理出来,希望能对大家分析测试结果有所帮助。 分析原则: 1. 具体问题具体分析(这是由于不同的应用系统,不同的测试目的,不同的性能关注点) 2. 查找瓶颈时按以下顺序,由易到难。 服务器硬件瓶颈-〉网络瓶颈(对局域网,可以不考虑)-〉服务器 操作系统 瓶颈(参数配置)-〉中间件瓶颈(参数配置, 数据库 , web 服务器等)-〉应用瓶颈( SQL 语句、数据库设计、业务逻辑、算法等) 注:以上过程并不是每个分析中都需要的,要根据测试目的和要求来确定分析的深度。对一些要求低的,我们分析到应用系统在将来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了。 3 分段排除法 很有效 分析的信息来源: 1 根据场景运行过程中的错误提示信息 2 根据测试结果收集到的监控指标数据 一.错误提示分析 分析实例: 1 Error: Failed to connect to server “10.10.10.30:8080″: [10060] Connection Error: timed out Error: Server “10.10.10.30″ has shut down the connection

I/O设备与主机交换信息中,查询、中断、DMA的特点

こ雲淡風輕ζ 提交于 2020-01-03 17:42:27
期末考试了,考组成原理,要自己总结下,我觉得有用的内容(嘿嘿,小傻猫 (> ω <) 自用,仅供参考) I/O设备与组机交换信息共有5中方式(我简单记录前三种) 1、程序查新方式 2、程序中断方式 3、直接存储器存取方式(DMA) 4、 I/O通道方式 5、I/O处理机方式 1、程序查询方式: 程序查询方式是由CPU不断查询I/O设备是否已做好准备,从而控 制I/O设备与主机交换信息。 2、程序中断方式: CPU在启动I/O设备后,不查询设备是否已准备就绪,继续执行原 来的程序,只是当I/O设备准备就绪并向CPU发出中断请求后才给 予响应 3、DMA: 主存与I/O设备之间有一条数据通道,主存与I/O设备交换信息的 时,无需调用中断程序服务程序。若是出现DMA与CPU同时访问 主存, CPU总是将总线的占有权让给DMA(因为DMA优先级更高) 通常将 DMA的这种占有成为 周期窃取/周期挪用(窃取时间一 般为一个存储周期,会考的哟,嘿嘿嘿) 其中程序查询、程序中断、DMA三者信息交换特点 查询:CPU与设备串行工作,传送与主程序串行工作 中断:CPU与设备并行工作,传送与主程序串行工作 DMA: CPU与设备并行工作,传送与主程序并行工作 其中主机与I/O设备传递数据时,采用DMA方式,CPU利用率最高,程序查询方式,CPU利用率最低。 I/O采用统一编址,进行输入输出操作的指令是

浅谈Nginx主配置文件

泪湿孤枕 提交于 2020-01-02 15:32:45
浅谈Nginx主配置文件 1️⃣ Nginx配置文件组成部分 2️⃣ Nginx主配置文件结构 3️⃣ Nginx 全局配置 🅿 1.正常运行必备的配置 🅿 2.性能优化相关的配置 🅿 3.事件驱动相关的配置 🅿 4.调试和定位配置 1️⃣ Nginx配置文件组成部分 Nginx的配置⽂件的组成部分: 主配置⽂件: nginx.conf ,⼦配置⽂件 include conf.d/*.conf 主配置文件各种配置段的的详细配置选项信息见:http://nginx.org/en/docs/ngx_core_module.html 配置文件的结构: 段:如 http{} 、 event{} 、 server{} 、 location{} 等,段可以并列,也可以嵌套。 块:指的就是在段里定义的一组directives(配置指令)。 directive:指的就是块里的一条条配置指令。指令定义方法: directive value [value2 ...];。 注意: (1) 指令必须以分号结尾。 (2)嵌套的段是有层级结构的,比如http段里,遵循http{}–>server{}–>location{}这种嵌套结构。 (3) 支持使用配置变量: 内建变量:由Nginx模块引入,可直接引用。 自定义变量:由用户使用set命令定义。 定义变量: set variable_name value;

线程初步了解 - <第一篇>

一世执手 提交于 2020-01-02 05:25:28
操作系统通过线程对程序的执行进行管理,当操作系统运行一个程序的时候,首先,操作系统将为这个准备运行的程序分配一个进程,以管理这个程序所需要的各种资源。在这些资源之中,会包含一个称为主线程的线程数据结构,用来管理这个程序的执行状态。   在Windows操作系统下,线程的的数据结构包含以下内容:   1、线程的核心对象:主要包含线程当前的寄存器状态, 当操作系统调度这个线程开始运行的时候,寄存器的状态将被加载到CPU中,重新构建线程的执行环境,当线程被调度出来的时候,最后的寄存器状态被重新保存到这里,已备下一次执行的时候使用。   2、线程环境块(Thread Environment Block,TED):是一块用户模式下的内存,包含线程的异常处理链的头部。另外,线程的局部存储数据(Thread Local Storage Data)也存在这里。   3、用户模式的堆栈:用户程序的局部变量和参数传递所使用的堆栈,默认情况下,Windows将会被分配1M的空间用于用户模式堆栈。   4、内核模式堆栈:用于访问操作系统时使用的堆栈。   在抢先式多任务的环境下,在一个特定的时间,CPU将一个线程调度进CPU中执行,这个线程最多将会运行一个时间片的时间长度,当时间片到期之后,操作系统将这个线程调度出CPU,将另外一个线程调度进CPU,我们通常称这种操作为上下文切换。