cpu时间

自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析

蹲街弑〆低调 提交于 2020-01-31 03:56:30
转自:http://blog.csdn.net/wh_19910525/article/details/11536279 自旋锁的初衷:在短期间内进行 轻量级的锁定 。一个被争用的自旋锁使得请求它的线程在等待锁重新可用的期间进行自旋( 特别浪费处理器时间 ),所以自旋锁不应该被持有时间过长。如果需要长时间锁定的话, 最好使用信号量。 单处理器的自旋锁: 首先,自旋锁的目的如果在系统不支持内核抢占时,自旋锁的实现也是空的,因为单核只有一个线程在执行,不会有内核抢占,从而资源也不会被其他线程访问到。 其次,支持内核抢占,由于自旋锁是禁止抢占内核的,所以不会有其他的进程因为等待锁而自旋. 最后,只有在多cpu下,其他的cpu因为等待该cpu释放锁,而处于自旋状态,不停轮询锁的状态。所以这样的话,如果一旦自旋锁内代码执行时间较长,等待该锁的cpu会耗费大量资源,也是不同于信号量和互斥锁的地方。 简单来说,自旋锁在内核中主要用来防止多处理器中并发访问临界区,防止内核抢占造成的竞争。 自旋锁内睡眠禁止睡眠问题: 如果自旋锁锁住以后进入睡眠,而此时又不能进行处理器抢占(锁住会disable prempt),其他进程无法获得cpu,这样也不能唤醒睡眠的自旋锁,因此不相应任何操作。 自旋锁为什么广泛用于内核: 自旋锁是一种轻量级的互斥锁,可以更高效的对互斥资源进行保护

数组和链表区别?为什么链表查找慢?数组查找快?为什么连续内存就方便查找?

拥有回忆 提交于 2020-01-31 02:14:05
数组与链表的优缺点; 数组: 优点:使用方便 ,查询效率 比链表高,内存为一连续的区域 缺点:大小固定,不适合动态存储,不方便动态添加 链表: 优点:可动态添加删除 大小可变 ,内存可能是不连续内存,链式存储。 缺点:只能通过顺次指针访问,查询效率低 链表和数组的本质差异 1 在访问方式上 数组可以随机访问其中的元素 链表则必须是顺序访问,不能随机访问 2 空间的使用上 链表可以随意扩大 数组则不能 从CPU的角度 CPU 寄存器 – immediate access (0-1个CPU时钟周期) CPU L1 缓存 – fast access (3个CPU时钟周期) CPU L2 缓存 – slightly slower access (10个CPU时钟周期) 内存 (RAM) – slow access (100个CPU时钟周期) 硬盘 (file system) – very slow (10,000,000个CPU时钟周期) 各级别的存储器速度差异非常大,CPU寄存器速度是内存速度的100倍! 这就是为什么CPU产商发明了CPU缓存。 而这个CPU缓存,就是数组和链表的区别的关键所在。 CPU缓存会把一片连续的内存空间读入 ,因为数组结构是连续的内存地址,所以数组全部或者部分元素被连续存在CPU缓存里面,平均读取 每个元素的时间只要3个CPU时钟时间。

多线程、线程安全、线程状态、等待唤醒机制、线程池

醉酒当歌 提交于 2020-01-30 23:42:53
主要内容 线程 同步 线程状态 等待与唤醒案例 线程池 教学目标 说出进程的概念 说出线程的概念 能够理解并发与并行的区别 能够开启新线程 能够描述Java中多线程运行原理 能够使用继承类的方式创建多线程 能够使用实现接口的方式创建多线程 能够说出实现接口方式的好处 能够解释安全问题的出现的原因 能够使用同步代码块解决线程安全问题 能够使用同步方法解决线程安全问题 能够说出线程6个状态的名称 能够理解线程通信概念 能够理解等待唤醒机制 能够描述Java中线程池运行原理 能够理解函数式编程相对于面向对象的优点 第一章 多线程 我们在之前,学习的程序在没有跳转语句的前提下,都是由上至下依次执行,那现在想要设计一个程序,边打游戏边听歌,怎么设计? 要解决上述问题,咱们得使用多进程或者多线程来解决. 1.1 并发与并行 并发 :指两个或多个事件在 同一个时间段内 发生。 并行 :指两个或多个事件在 同一时刻 发生(同时发生)。 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。 而在多个 CPU 系统中,则这些可以并发执行的程序便可以分配到多个处理器上(CPU),实现多任务并行执行

我的第一次diy装机记录——小白的配置篇

 ̄綄美尐妖づ 提交于 2020-01-30 10:12:32
工欲善其事,必先利其器 相对于IT人来说,电脑是个好东西,应该是第二个除了手机陪伴我们最长的东西。今年4月份来的杭州,留下了那款陪我征战4年的笔记本,没有电脑,下班后的夜晚索然无味,身心的需求也日渐强盛。。。 一,台式机 or 笔记本? 有需求就得有解决方案,分析一下两个的区别: 1,便携性:台式机笨重不便于携带;笔记本轻巧说走就走,合适经常出差的 2,性能:两者都有高低之分,不过笔记本散热没台式好 3,价格:一般同等配置的笔记本要比台式机贵点,毕竟多了块屏幕 。。。 所以作为家境贫寒的我,又不会经常出差,被台式机的性价比所吸引,虽然后面搬家可能会麻烦一点 二,台式机配置 选择了台式机,那么是选择品牌整机还是diy一台,这是个问题! 作为一个千翻(折腾)的测试员,简单纯粹,当然diy啊,因为整机是没有灵魂的! 接下来准备该配置了,一般来说,什么配置由使用需求决定。不要最好,只要更好。那么中上级别的配置怎么选择: (网上资料很多,以下仅供参考) 1,CPU cpu相当于人类的大脑,一般来说频率越高,脑袋瓜越灵活。cpu分Intel和AMD两个阵营,我截个cpu天梯图如下,越靠上的越牛逼,问Intel和AMD的谁最好?(就像问什么语言是世界上最好的编程语言?) 我选的是Ryzen 5 2600x,买新不买旧,主要是性价比高。 2,主板 主板就相当于人体的骨骼系统

计算机组成:输入输出系统

老子叫甜甜 提交于 2020-01-29 18:22:09
输入输出系统 通道可以看做是DMA的升级版,通道有自己的控制器甚至是存储器、内存 通道可以执行由通道指令编写的程序,由操作系统完成 如果使用通道,就不是连接接口了,而是连接设备管理器 I/O处理机可以使用微处理器甚至直接使用和主处理器相同的处理器来做,当然这就不是家用电脑的范畴了,强大的I/O处理机甚至在没有IO工作时,可以作为主机的处理器来使用 I/O和主机的连接方式 统一编址:将io地址看成内存地址的一部分。这种方式实现了io和内存的统一不需要单独的io指令,CPU指令集相对简单,如果内存空间比较大(eg.64位)可以采用这种方式 单独编址: 串行速度慢,但是适合长距离传输 不便于增删设备 外部设备输出的数据可以先缓存到io接口,进行数据格式的转换等操作再输入主机 便于增删设备、采用标准接口,可移植性强 信息传送的控制方式 CPU直接对IO进行管理 缺点就是广为人知的,浪费CPU DMA请求:向CPU申请占用一个存取周期的总线控制权从而将外部设备的数据加载到内存中,这个周期内CPU不能使用总线对内存进行访问,但是这段时间CPU依然可以正常使用(由于CPU会预先取一部分指令,这段时间不能访问内存有可能影响不大) 外部设备简介 主观图像:用户绘制的图像,由点线面构成,就是简单的那种 客观图像:eg.GUI A:模拟信号 D:数字信号 IO接口 为什么使用接口 主机可能使用并行传输

单线程(Thread)与多线程的区别

随声附和 提交于 2020-01-29 17:21:22
首先了解一下cpu,随着主频(cpu内核工作时钟频率,表示在CPU内数字脉冲信号震荡的速度,等于外频(系统基本时间)乘倍频)的不断攀升,X86构架的硬件逐渐成为瓶颈,最高为4G,事实上目前 3.6G 主频的CPU已经接近顶峰。 多线程编程的目的,就是"最大限度地利用CPU资源" ,当某一线程的处理不需要占用CPU而只和I/O,OEMBIOS等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。 每个程序执行时都会产生一个进程,而每一个进程至少要有一个主线程 。这个线程其实是进程执行的一条线索,除了主线程外你还可以给进程增加其它的线程,也即增加其它的执行线索,由此在某种程度上可以看成是给一个应用程序增加了多任务功能。当程序运行后,您可以根据各种条件挂起或运行这些线程,尤其在多CPU的环境中,这些线程是并发运行的。多线程就是在一个进程内有多个线程。从而使一个应用程序有了多任务的功能。多进程技术也可以实现这一点,但是创建进程的高消耗(每个进程都有独立的数据和代码空间),进程之间通信的不方便(消息机制),进程切换的时间太长,这些导致了多线程的提出, 对于单CPU来说(没有开启超线程),在同一时间只能执行一个线程,所以如果想实现多任务,那么就只能每个进程或线程获得一个时间片,在某个时间片内,只能一个线程执行,然后按照某种策略换其他线程执行。由于时间片很短

性能监视器- Performance Monitor

时间秒杀一切 提交于 2020-01-29 13:53:27
转载: http://kms.lenovots.com/kb/article.php?id=7045 Windows 性能监视器的基本指标(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的数据至关重要,关系着优化和分析出现的问题,因此,今天给出Windows 性能监视器的一些基本指标(CPU,内存,硬盘参数),希望对大家将来优化和分析问题提供帮忙。 Windows -Processor 指标名称 指标描述 指标范围 指标单位 CPU利用率 (% Processor Time) % Processor Time指处理器执行非闲置线程时间的百分比。这个计数器设计成用来作为处理器活动的主要指示器。它通过在每个时间间隔中衡量处理器用于执行闲置处理线程的时间,并且用100%减去该值得出。可将其视为范例间隔用于做有用工作的百分比。 根据应用系统情况,在80%±5%范围内波动为宜。过低,则服务器CPU利用率不高;过高,则CPU可能成为系统的处理瓶颈。 % 中断率 (Interrupts/sec.) 每秒钟设备中断处理器的次数。在完成一个任务或需要注意时,装置会发出中断讯号给处理器。可以产生中断的装置包括系统定时器、鼠标、数据通讯联机、网络卡以及其它的外部装置。在中断过程中,一般的执行绪执行将被暂停,而且一个中断可以使处理器切换到另一个具有较高优先等级的执行绪

linux服务器性能查看

谁说胖子不能爱 提交于 2020-01-29 09:00:45
1.1 cpu性能查看 1、查看物理cpu个数: cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l 2、查看每个物理cpu中的core个数: cat /proc/cpuinfo |grep "cpu cores"|wc -l 3、逻辑cpu的个数: cat /proc/cpuinfo |grep "processor"|wc -l 物理cpu个数*核数=逻辑cpu个数(不支持超线程技术的情况下) 1.2 内存查看 1、查看内存使用情况: #free -m total used free shared buffers cachedMem: 3949 2519 1430 0 189 1619-/+ buffers/cache: 710 3239Swap: 3576 0 3576total:内存总数 used:已经使用的内存数 free:空闲内存数 shared:多个进程共享的内存总额 - buffers/cache:(已用)的内存数,即used-buffers-cached + buffers/cache:(可用)的内存数,即free+buffers+cached Buffer Cache用于针对磁盘块的读写; Page Cache用于针对文件inode的读写,这些Cache能有效地缩短I/O系统调用的时间。

你可能不知道的 Python 技巧

会有一股神秘感。 提交于 2020-01-28 22:30:49
英文 | Python Tips and Trick, You Haven't Already Seen 原作 | Martin Heinz ( https://martinheinz.dev ) 译者 | 豌豆花下猫 声明 :本文获得原作者授权翻译,转载请保留原文出处,请勿用于商业或非法用途。 有许许多多文章写了 Python 中的许多很酷的特性,例如变量解包、偏函数、枚举可迭代对象,但是关于 Python 还有很多要讨论的话题,因此在本文中,我将尝试展示一些我知道的和在使用的,但很少在其它文章提到过的特性。那就开始吧。 1、对输入的字符串“消毒” 对用户输入的内容“消毒”,这问题几乎适用于你编写的所有程序。通常将字符转换为小写或大写就足够了,有时你还可以使用正则表达式来完成工作,但是对于复杂的情况,还有更好的方法: user_input = "This\nstring has\tsome whitespaces...\r\n" character_map = { ord('\n') : ' ', ord('\t') : ' ', ord('\r') : None } user_input.translate(character_map) # This string has some whitespaces... " 在此示例中,你可以看到空格字符“ \n”和“ \t

java并发基础知识

跟風遠走 提交于 2020-01-28 20:44:52
  这几天全国都是关键时候,放假了,还是要学习啊!很久没有写博客了,最近看了一本书,有关于java并发编程的,书名叫做“java并发编程之美”,讲的很有意思,这里就做一个笔记吧!     有需要openjdk8源码的,可以直接下载 链接:https://pan.baidu.com/s/1_uT99PLxH-STcs0zl0Mhuw 提取码:ov5b 一.了解并发和并行   并发:指的是 同一时间段内 多个任务在执行,并且没有执行结束;就好像你用一个手机看视频,你一下子想看熊出没,一下子又想看喜羊羊,那么你会怎么办?可以这个视频看几秒钟,然后那个视频看几秒钟,最关键的是当你从熊出没->喜羊羊,然后再跳到熊出没的时候,可以直接跳到上次看的记录的位置,这个才是并发最重要的地方;   在这里,你的眼睛就相当于一个cpu,在来回的切换视频,每个视频就是一个线程,然后可以跳转回上次的最后观看的位置,这功能就是类似PC计数器的作用,可以保存每个线程切换时候的上下文;   并行:理解了上面的并发,那么并行就很好理解!记得看过火影没有,可以知道鸣人用影分身修炼的情节,这个就是并行!如果你会影分身,那么你和你的分身分别用一个手机去看熊出没和喜羊羊,然后解除影分身,那么你就一下子同时看完两集了!哈哈哈,这个比喻还行吧!其实就是有两个CPU分别去执行一个线程,再把运行后的结果汇总   在多线程编程实践中