cpu时间

java中常用的锁机制

*爱你&永不变心* 提交于 2020-01-28 20:44:38
基础知识 基础知识之一:锁的类型 锁就那么几个,只是根据特性,分为不同的类型 锁的概念 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制。锁旨在强制实施互斥排他、并发控制策略。 锁通常需要硬件支持才能有效实施。这种支持通常采取一个或多个原子指令的形式,如"test-and-set", "fetch-and-add" or "compare-and-swap"”。这些指令允许单个进程测试锁是否空闲,如果空闲,则通过单个原子操作获取锁。 锁的三个概念 1、锁开销 lock overhead 锁占用内存空间、 cpu初始化和销毁锁、获取和释放锁的时间。程序使用的锁越多,相应的锁开销越大 2、锁竞争 lock contention 一个进程或线程试图获取另一个进程或线程持有的锁,就会发生锁竞争。锁粒度越小,发生锁竞争的可能性就越小 3、死锁 deadlock 至少两个任务中的每一个都等待另一个任务持有的锁的情况锁粒度是衡量锁保护的数据量大小,通常选择粗粒度的锁(锁的数量少,每个锁保护大量的数据),在当单进程访问受保护的数据时锁开销小,但是当多个进程同时访问时性能很差。因为增大了锁的竞争。相反,使用细粒度的锁(锁数量多,每个锁保护少量的数据)增加了锁的开销但是减少了锁竞争。例如数据库中,锁的粒度有表锁、页锁、行锁、字段锁

JVM探秘:垃圾收集器

别等时光非礼了梦想. 提交于 2020-01-28 17:03:04
本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 垃圾收集器 搜小说 https://shupu.org/ 垃圾收集算法是是内存回收的方法论,垃圾收集器是内存回收的具体实现。不同的虚拟机会有不同的垃圾收集器的实现,我们主要讨论的是默认的HotSpot虚拟机,这个虚拟机包含的垃圾收集器如下图; 如上图所示,一共有7种垃圾收集器,如果两个垃圾收集器之间有双箭头连线,则两个垃圾收集器可搭配使用。上面是新生代的收集器,下面是老年代的收集器。每个垃圾收集器都有各自适合的使用场景。 Serial 收集器 Serial 是一个“单线程”的 新生代 收集器,使用 复制 算法,它只会使用一个CPU或者一条收集器线程去完成垃圾收集工作,并且它在垃圾收集时,必须 暂停所有其他的工作线程 ,直到它收集结束。“Stop The World”会在用户不可见的情况下,把用户的工作线程全部停掉,这往往是令人难以接受的。 下图是 Serial/Serial Old 收集器运行示意图: 上图中,新生代是 Serial 收集器采用 复制 算法,老年代是 Serial Old 收集器采用 标记-整理 算法。Serial虽然是一个缺点鲜明的收集器,但它依然是虚拟机在Client模式下的默认收集器,它也有优点,比如简单高效(与其他收集器单线程相比),对于单个CPU来说

进程、线程、以及它们之间的区别与联系

我的未来我决定 提交于 2020-01-28 15:06:08
一、进程简介 1.1 进程概念的引入 计算机中,CPU是最宝贵的资源,为了提高CPU的利用率,引入了多道程序设计的概念。当内存中多个程序存在时,如果不对人们熟悉的“程序”的概念加以扩充,就无法刻画多个程序共同运行时系统呈现出的特征。 多道程序设计:是指允许多个作业(程序)同时进入计算机系统的内存并启动交替计算的方法。 也就是说,内存中多个相互独立的程序均处于开始和结束之间。 从宏观上看是并行的,多道程序都处于运行过程中,但尚未运行结束; 从微观角度上看是串行的,各道程序轮流的占用CPU交替的执行。 引入多道程序设计技术可以提高CPU的利用率,充分发挥计算机硬部件的并行性。 多道程序系统中,程序具有:并行、制约以及动态的特征。程序概念难以便是和反映系统中的情况,所以引入了进程这一概念。 1.2 程序是什么 说起进程,就不得不说下程序。先看定义:程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个 静态 的概念。系统实际上是出于不断变化的状态中,程序不能反映这种动态性。 而进程则是在处理机上的一次执行过程,它是一个 动态 的概念。这个不难理解,其实进程是包含程序的,进程的执行离不开程序,进程中的文本区域就是代码区,也就是程序。 1.3 进程是什么 1.3.1 进程的概念 进程的定义: 进程是据有独立功能的程序在某个数据集合上的一次运行活动

深入理解CAS算法原理

懵懂的女人 提交于 2020-01-28 12:46:27
1、什么是CAS? CAS:Compare and Swap,即比较再交换。 jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。 2、CAS算法理解 对CAS的理解,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 CAS比较与交换的伪代码可以表示为: do{ 备份旧数据; 基于旧数据构造新数据; }while(!CAS( 内存地址,备份的旧数据,新数据 )) https://upload-images.jianshu.io/upload_images/5954965-b88918b03518f254?imageMogr2/auto-orient/strip|imageView2/2/w/320/format/webp 注:t1,t2线程是同时更新同一变量56的值 因为t1和t2线程都同时去访问同一变量56,所以他们会把主内存的值完全拷贝一份到自己的工作内存空间,所以t1和t2线程的预期值都为56。 假设t1在与t2线程竞争中线程t1能去更新变量的值,而其他线程都失败。

信号和中断的比较 + 中断和异常的比较

巧了我就是萌 提交于 2020-01-28 11:56:02
概念太多了,信号,软中断,中断等等。试着做总结。 下面这个里面主要讲了硬件中断: http://www.cnblogs.com/charlesblc/p/6261741.html 下面这个里面主要讲了软中断,硬中断: http://www.cnblogs.com/charlesblc/p/6263208.html 这里先比较一下异常和中断 参考 http://blog.csdn.net/dodo_check/article/details/8806961 l 中 断(也称硬件中断) 定义:中断是由 其他硬件设备 依照CPU时钟周期信号随机产生的。 分类: 可屏蔽中断 非可屏蔽中断 来源: 间隔定时器和I/O l 异 常(也称软件中断) 定义:当指令执行时 由CPU控制单元 产生的。 分类: 处理器探测到的异常 ² 故障 ² 陷阱 ² 异常终止 编程异常(也称软中断) ² int指令 来源: 程序的错误产生的 内核必须处理的异常(例如:缺页和内核服务的请求-int) 异常处理 l 当发生异常时,CPU控制单元产生一个硬件出错码。 l CPU根据该中断吗找到中断向量表内的对应向量,根据该向量转到中断处理程序。 l 中断处理程序处理完之后向当前进程发送一个SIG***信号。 l 若进程定义了相应的信号处理程序则转移到相应的程序执行,若没有,则执行内核定义的操作。 中断处理 l

从主频之争到多核之争,摩尔定律还能走多远?

泄露秘密 提交于 2020-01-28 04:13:35
从主频之争到多核之争,摩尔定律还能走多远? 本文通过对几个基础问题的探讨,从IC设计角度介绍一点处理器的知识和发展。希望对长时间做高级语言开发的朋友有点帮助,随便看看权当娱乐。 1.CPU的速度是什么决定的?   我们通常用频率(frequency)来描述一颗处理器的速度,比如1.6GHz,3.8GHz。这个频率是什么的频率?它又是根据什么来决定的呢?我遇到不少童鞋以为频率高是因为我们可以做出更快的晶振,这是本末倒置的想法。一颗处理器的最高频率是根据它内在电路决定的,决定以后,才选取适当频率的晶振来为它产生漂亮的脉冲。   比如CPU做这样一个运算(1+2)+(3*4)。1+2 和 3*4 分别送入加法器和乘法器,各自的结果作为输入再送入加法器。由于加法要比乘法快,1+2先算完放到一个寄存器待用,等3*4结果出来也放入寄存器之后,二者一再起送入加法器。而为了同步,我们给这些运算加入一种步伐,也就是时钟信号。我们规定时钟的一个周期为需要时间最长的乘法,这样就可以保证再第二个时钟信号到来的时候,之前的全部运算都可以准确完成并将结果存入寄存器,进入下一个运算周期。   这个周期切换的速度,就是频率。很明显,频率越高,计算速度越快嘛。 一块芯片的频率,就是耗时最长的那条电路(critical path)决定的。芯片的频率的设定,要保证耗时最长的那段电路可以在一个时钟周期内运算完毕。 2

java并发变成及juc包的应用

╄→尐↘猪︶ㄣ 提交于 2020-01-28 03:51:22
多线程: windows操作系统是多任务操作系统,它以进程为单位,一个进程是一个包含有自身地址的程序,每个正在独立执行的程序都称为进程,进程是系统进行资源分配和调用的独立单位,每个进程有自己的内存空间和系统资源。系统可以分配给每个进程一段有限的使用CPU时间,CPU在这个时间片中执行某个进程,然后下一个时间片又跳到另一个进程中去执行,由于CPU转换较快,所以使的每个进程好像同时进行,多核CPU的多核同时运行,但是进程数远远大于核数,所以还是要依靠切换进程来做。一个线程则是进程中的执行流程,一个进程中可以同时包括多个线程,每个线程也可以得到一小段程序的执行时间,这样一个进程就可以具有多个并发执行的线程,在单线程中,程序的代码按照调用顺序依次往下执行,如果需要一个进程同时完成多段代码的操作,就需要产生多线程(多条执行路径)。多线程可以提高应用程序的使用率,为了有更高的几率抢到CPU的执行权,但我们不能保证哪一个线程能够在哪一个时刻抢到,所以线程的执行有随机性。在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。 线程的两种调度模型:平均分配每个线程占用CPU的时间片,上面说的就是这种,第二种就是抢占式调度模型:优先让优先级高的线程使用CPU,如果线程的优先级相同,会随机选一个,优先级高仅仅表示线程获取的cpu时间片的几率相对对多些

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

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

linux系统负载

◇◆丶佛笑我妖孽 提交于 2020-01-28 02:55:44
系统负载System Load:系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度 平均负载(Load Average):一段时间内系统的平均负载,这个一段时间一般取1分钟、5分钟、15分钟 查看 top 1分钟平均负载,5分钟平均负载,15分钟平均负载分别是0.05、0.06、0.05 uptime 1分钟平均负载,5分钟平均负载,15分钟平均负载分别是0.11、0.07、0.05 w 1分钟平均负载,5分钟平均负载,15分钟平均负载分别是0.05、0.06、0.05 Load则表示系统的繁忙程度 单核 Load<1:没有等待 Load==1:系统已无额外的资源跑更多的进程了 Load>1:进程都堵着等待资源   注:     需要警惕的       Load < 0.7时:系统很闲,要考虑多部署一些服务       0.7 < Load < 1时:系统状态不错       Load == 1时:系统马上要处理不多来了,赶紧找一下原因       Load > 5时:系统已经非常繁忙了   不同Load值说明的问题          1)1分钟Load>5,5分钟Load<1,15分钟Load<1        短期内繁忙,中长期空闲,初步判断是一个 抖动或者是拥塞前兆     2)1分钟Load>5,5分钟Load>1,15分钟Load<1       短期内繁忙

详解tomcat的连接数与线程池

ぃ、小莉子 提交于 2020-01-27 06:33:36
详解tomcat的连接数与线程池 1、Connector的protocol Connector在处理HTTP请求时,会使用不同的protocol。不同的Tomcat版本支持的protocol不同,其中最典型的protocol包括BIO、NIO和APR(Tomcat7中支持这3种,Tomcat8增加了对NIO2的支持,而到了Tomcat8.5和Tomcat9.0,则去掉了对BIO的支持)。 BIO是Blocking IO,顾名思义是阻塞的IO;NIO是Non-blocking IO,则是非阻塞的IO。而APR是Apache Portable Runtime,是Apache可移植运行库,利用本地库可以实现高可扩展性、高性能;Apr是在Tomcat上运行高并发应用的首选模式,但是需要安装apr、apr-utils、tomcat-native等包。 2、如何指定protocol Connector使用哪种protocol,可以通过元素中的protocol属性进行指定,也可以使用默认值。 指定的protocol取值及对应的协议如下: HTTP/1.1:默认值,使用的协议与Tomcat版本有关 org.apache.coyote.http11.Http11Protocol:BIO org.apache.coyote.http11.Http11NioProtocol:NIO org.apache