当前位置:首页 > 教育培训 >

计算机基础主要学习哪些内容

来源:原点资讯(www.yd166.com)时间:2023-06-02 17:30:06作者:YD166手机阅读>>

那么当检测出死锁时,这些线程该做些什么呢?

一个可行的做法是释放所有锁,回退,并且等待一段随机的时间后重试。这个和简单的加锁超时类似,不一样的是只有死锁已经发生了才回退,而不会是因为加锁的请求超时了。虽然有回退和等待,但是如果有大量的线程竞争同一批锁,它们还是会重复地死锁(编者注:原因同超时类似,不能从根本上减轻竞争)。

一个更好的方案是给这些线程设置优先级,让一个(或几个)线程回退,剩下的线程就像没发生死锁一样继续保持着它们需要的锁。如果赋予这些线程的优先级是固定不变的,同一批线程总是会拥有更高的优先级。为避免这个问题,可以在死锁发生的时候设置随机的优先级。

6、高速缓存Cache

Cache的原理

Cache,即高速缓存,是介于CPU和内存之间的高速小容量存储器。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近CPU的频率。
当CPU发出内存访问请求时,会先查看 Cache 内是否有请求数据。
如果存在(命中),则直接返回该数据;
如果不存在(失效),再去访问内存 —— 先把内存中的相应数据载入缓存,再将其返回处理器。
提供“高速缓存”的目的是让数据访问的速度适应CPU的处理速度,通过减少访问内存的次数来提高数据存取的速度。

Cache 技术所依赖的原理是”程序执行与数据访问的局部性原理“,这种局部性表现在两个方面:
时间局部性:如果程序中的某条指令一旦执行,不久以后该指令可能再次执行,如果某数据被访问过,不久以后该数据可能再次被访问。
空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,这是因为指令或数据通常是顺序存放的。
时间局部性是通过将近来使用的指令和数据保存到Cache中实现。空间局部性通常是使用较大的高速缓存,并将 预取机制 集成到高速缓存控制逻辑中来实现。

Cache替换策略(页面置换算法)

Cache的容量是有限的,当Cache的空间都被占满后,如果再次发生缓存失效,就必须选择一个缓存块来替换掉。常用的替换策略有以下几种:
(1)最佳置换算法(Optimal):即选择那些永不使用的,或者是在最长时间内不再被访问的页面置换出去。(它是一种理想化的算法,性能最好,但在实际上难于实现)。
(2)先进先出置换算法FIFO:该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
(3)最近最久未使用置换算法LRU(Least Recently Used):该算法是选择最近最久未使用的页面予以淘汰,系统在每个页面设置一个访问字段,用以记录这个页面自上次被访问以来所经历的时间T,当要淘汰一个页面时,选择T最大的页面。
(4)Clock置换算法:也叫最近未用算法NRU(Not RecentlyUsed)。该算法为每个页面设置一位访问位,将内存中的所有页面都通过链接指针链成一个循环队列。当某页被访问时,其访问位置“1”。在选择一页淘汰时,就检查其访问位,如果是“0”,就选择该页换出;若为“1”,则重新置为“0”,暂不换出该页,在循环队列中检查下一个页面,直到访问位为“0”的页面为止。由于该算法只有一位访问位,只能用它表示该页是否已经使用过,而置换时是将未使用过的页面换出去,所以把该算法称为最近未用算法。
(5)最少使用置换算法LFU:该算法选择最近时期使用最少的页面作为淘汰页。

7、最近最久未使用置换算法LRU的JAVA实现

之前面头条的暑期实习生时曾经考过这道题,因此这里整理一下。

思路分析

对一个Cache的操作无非三种:插入(insert)、替换(replace)、查找(lookup)。
为了能够快速删除最久没有访问的数据项和插入最新的数据项,我们使用 双向链表 连接Cache中的数据项,并且保证链表维持数据项从最近访问到最旧访问的顺序。
插入:当Cache未满时,新的数据项只需插到双链表头部即可。时间复杂度为O(1).
替换:当Cache已满时,将新的数据项插到双链表头部,并删除双链表的尾结点即可。时间复杂度为O(1).
查找:每次数据项被查询到时,都将此数据项移动到链表头部。
经过分析,我们知道使用双向链表可以保证插入和替换的时间复杂度是O(1),但查询的时间复杂度是O(n),因为需要对双链表进行遍历。为了让查找效率也达到O(1),很自然的会想到使用 hash table 。

具体的实现代码如下:

计算机基础主要学习哪些内容,(5)

计算机基础主要学习哪些内容,(6)

计算机基础主要学习哪些内容,(7)

计算机基础主要学习哪些内容,(8)

栏目热文

想要学好计算机必须要有什么条件(想学计算机应该先有什么规划)

想要学好计算机必须要有什么条件(想学计算机应该先有什么规划)

计算机专业是指计算机硬件与软件相结合、面向系统、更偏向应用的宽口径专业。通过基础教学与专业训练,培养基础知识扎实、知识面...

2023-06-02 18:11:38查看全文 >>

学好计算机需要哪些基础知识

学好计算机需要哪些基础知识

码农翻身刘欣 合天智汇有网友问道:“欣哥,你的知识框架中最基础的点是哪些?或者哪方面是比较重要的?” 我看到这个问题一下...

2023-06-02 17:43:39查看全文 >>

读计算机第二年都要学哪些知识呢

读计算机第二年都要学哪些知识呢

首先,对于计算机专业的大一同学来说,除了要学习好学校安排的课程之外,还应该做好三件事,其一是重视编程语言的学习,可以把一...

2023-06-02 17:49:41查看全文 >>

学习计算机基础知识要注意哪些

学习计算机基础知识要注意哪些

目前的计算机知识体系已经较为庞大,初学者需要根据自己的实际情况制定学习计划。学习计算机知识除了要有学习能力外,还要有着良...

2023-06-02 17:55:58查看全文 >>

计算机初学先学什么好(新手学计算机学什么好)

计算机初学先学什么好(新手学计算机学什么好)

首先,对于没有计算机基础知识的初学者来说,从编程语言开始学起是不错的选择,一方面编程语言本身的逻辑性比较强,学习起来具有...

2023-06-02 17:41:06查看全文 >>

计算机基础需要学习什么(学习计算机需要学习什么)

计算机基础需要学习什么(学习计算机需要学习什么)

简单来说就是:万丈高楼平地起,站得高看得远。如果将编程知识体系比作一座大楼,理论基础是大楼的地基,地基打不好,大楼就会存...

2023-06-02 17:56:52查看全文 >>

学习计算机最好学习什么

学习计算机最好学习什么

计算机类专业是中国高校开设最多的专业之一,也是理工类考生报考的热门学科,即使计算机类专业毕业生就业形势严峻,但从长期市场...

2023-06-02 17:25:13查看全文 >>

学习计算机必须学什么

学习计算机必须学什么

这里给大家一个建议:以能力为导向学习,而不是以课程为导向学习。什么是以能力为导向?就是养成那些在你未来几十年工作中都能用...

2023-06-02 18:08:52查看全文 >>

怎么查自己的身份证照片(怎么查自己提交的身份证照片)

怎么查自己的身份证照片(怎么查自己提交的身份证照片)

支付宝是我们生活中比较常用的软件,最近有粉丝留言询问“支付宝怎么看身份证照片”,相信很多用户都不知道吧,其实并不难,下面...

2023-06-02 18:07:26查看全文 >>

怎么查询自己身份证照片(怎么查询自己身份证信息的照片)

怎么查询自己身份证照片(怎么查询自己身份证信息的照片)

来源:上观新闻 临时身份证当场受理、立等可取,身份证照片可查询和下载,大众点评可查询身份证拍照点……近期,上海市公安局...

2023-06-02 17:47:37查看全文 >>

文档排行