- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
每个人。
看了很多关于ClockPro缓存替换算法的文章——改进版Clock缓存替换。为了简单起见,我首先实现了 Clock。现在我想用 2 只手在 Java Clock-Pro 中实现(热和冷而不是真实算法中的 3 只手)。我找到了一些描述:
The ClockPro Algorithm
On Start():
cold_block = first block
hot_block = first block
On Memory Lookup():
curr_block = NULL
If block is in cache:
Set clock bit
Return block to CPU
Else:
While curr_block == NULL:
If cold_block.clockbit == 0:
curr_block = cold_block
Else if cold_block.test == 1 :
Turn cold hand block hot
Unset the clockbit
Run Hot Hand Algorithm
Else:
cold_block.clockbit = 0
cold_block = cold_block.next
If curr_block is dirty : write
Find accessed block in memory
Return fetched block to the CPU
Replace curr_block with fetched one
Hot Hand Algorithm() :
curr_block = NULL
While curr_block == NULL:
If hot_block is cold :
hot_block.text = 0
Else if hot_block.clockbit == 0 :
Turn the block cold
Else :
hot_block.clockbit = 0
hot_block = hot_block.next
如果有人试过,请回答一些问题:
什么是测试期?它什么时候开始,我们可以使用什么类型。只是一点点,可以告诉我们对象是否处于测试期,或者它是一个计数器?双手能否在某个时间点指向一个方 block ?
如果有人有能力,请帮我用一个简单的例子来模拟这种算法行为。谢谢。
最佳答案
该代码非常不完整。至少缺少两个重要部分:1)测试手(test hand)2) 热/冷页响应自适应
我不得不说,关于这个主题的原始论文确实缺少很多重要的细节。
我目前正在编写 Python 实现,但我还没有发布源代码,因为质量还不够高。
项目网址:https://bitbucket.org/samilehtinen/pyclockpro
即使发布了代码,我也很确定有一些次要但很重要的细节可能需要微调。
喜欢:1)初始化时内存热/冷页分配比率,我已经配置为冷页分配100%的内存。2) 如果热分配被调得太低以至于热手应该通过冷手怎么办。我假设在这种情况下,热分配被简单地忽略了,因为热手越过冷手会破坏一切。在这种情况下,hand hot 还清除了所有非驻留测试页。
根据测试数据,我的实现似乎得到了很好的调整。
您问题的答案:测试期是保留 key 但丢弃值的时间。在钟面上,您会看到冷和测试之间的这些条目。页面类型我用了int,0是非常驻冷页(测试页),1是冷页,2是热页。如果您使用指向数据的指针,如果指针为 Null,则页面为非常驻页面,因为您只有键而没有数据(值)。
是的,有时双手和所有手都可以指向一个方 block 。主要问题是,手可以互相过去吗?我认为如果发生这种情况,事情就会坏掉。所以基本上热手可以推测试手,也可以推冷手。取决于你如何实现。或者如果你像在论文中那样做,热手可以通过测试手,但在那种情况下它会拖着测试手。据我所知,热手不能越过冷手,或者如果你这样做,那么它会完成冷手的工作,但仍然会用热手拖拽冷手。
很难做出简单的例子,因为这并不简单。还有一些边缘情况需要处理,至少是这里提到的情况。自适应性还增加了边缘情况,因为在迭代处理期间内存分配可能会发生变化。在这些情况下保持 100% 分配需要一些额外的检查。如果您允许缓存大小中有 +/- 几个 block ,那么实现会更简单。
更新,Python 源代码和文档现已发布。因此,有完整的工作示例可以在 Python 中查看。
关于java - Clock-Pro缓存替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10228934/
这个问题在这里已经有了答案: What specifically are wall-clock-time, user-cpu-time, and system-cpu-time in UNIX? (4
我只是尝试使用 jasmine 在 javascript/coffeescript 中进行单元测试,非常好。 我一直在尝试使用 jasmine.Clock.Mock() 来提前并触发 setTimeo
现在使用 emacs org 模式大约一个月来跟踪我所有的项目和任务。 我全天为所有事件计时,而不仅仅是与工作相关的事件。 我的问题是——我经常忘记打卡参加一项新事件(比如吃午饭)。当我返回并打卡回到
我在看 Clock来自java的类,以便我可以将其作为依赖项注入(inject)以获得更好的可测试性。但是我不明白这两种方法的区别systemUTC和 systemDefaultZone . Inst
当我设置特定日期时,我正在努力测试我的端点。 我不想使用 PowerMock 来模拟静态方法,而是决定更改我的服务的实现并使用 LocalDate.now(Clock clock) 实现来更容易地测试
我有一个员工“上类打卡”表,具有开始时间和结束时间属性。每位员工上下类打卡,表格类似这样: Employee_no Start time End time 16
Linux perf工具(前段时间命名为 perf_events)有几个内置的通用软件事件。其中最基本的两个是:task-clock和 cpu_clock (内部称为 PERF_COUNT_SW_CP
我的方法之一中有以下代码 ZonedDateTime current = Instant.now().atZone(ZoneId.of(AMERICA_NEW_YORK)); 我想在 JUnit 测试
我正在使用 sf::Clock 来控制循环。 我想知道是否允许我使用超过 1 个 sf::Clock,如果允许,是否所有“时钟”都将正常运行并按预期工作在所有操作系统上。 例如: sf::Clock
假设您有一个 (1) Intel/AMD x86-64 位 2 GHz 8 核处理器。 8 个内核中的每一个是否都以完整的 2 GHz 运行,或者每个内核是否以完整的 2 GHz 时钟的一部分运行(例
对于 java 8 下面的代码 1. System.out.println(LocalDateTime.now(Clock.systemDefaultZone())); 2. System.o
我有以下使用Chatterbot第三方库的代码:。当我尝试使用代码时,从Visual Studio收到如下错误:。我安装了以下程序包:。我尝试了使用Python3.9和3.11以及Chatterbot
我有以下使用Chatterbot第三方库的代码:。当我尝试使用代码时,从Visual Studio收到如下错误:。我安装了以下程序包:。我尝试了使用Python3.9和3.11以及Chatterbot
我有以下使用Chatterbot第三方库的代码:。当我尝试使用代码时,从Visual Studio收到如下错误:。我安装了以下程序包:。我尝试了使用Python3.9和3.11以及Chatterbot
我有一个相对简单的要求:我希望我在 KVM 下创建的 CentOS 客户机上的时钟从 VM 的第一次启动就与它们的 CentOS 主机同步。 在它们启动并运行后将它们与 NTP 同步很容易。但是,如果
谁能告诉我如何找到STM32F429的APB1时钟频率?以及如何计算STM32F429的波特率。 P.S...请不要告诉我引用引用手册,因为这些工作已经完成,我想告诉我 APB1 时钟频率的确切值 谢
我在 LAN 上有 5 台服务器,没有 Internet 连接。我需要他们保持时钟同步。 我可以将它们配置为 NTP 对等体,并为其中一个的本地时钟设置较高的层数。这样,其他四个就会与该时钟同步。 我
让我们假设我们有许多系统连接在本地网络中并且没有连接到互联网。确保每个时钟同步的最佳方法是什么?它们不一定要与 UTC 时间同步,但在它们之间保持同步就足够了。 我曾想过通过在其中一个系统中设置 NT
我对 clock() 有疑问在运行 32 位版本的 Debian 6.0.3 的机器上。它似乎总是返回 0。使用 this example program 时,我得到以下输出: Calculating
我正在尝试编写一个程序来比较快速排序和插入排序函数所花费的时间,具体取决于数组中元素的数量。这是我想出的代码: #include #include #include //prototypes o
我是一名优秀的程序员,十分优秀!