Rust in Action笔记 第九章 时间管理

这篇具有很好参考价值的文章主要介绍了Rust in Action笔记 第九章 时间管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 本章主要讲如何实现一个网络时间协议NTP(Network Time Protocol)客户端,谷歌的世界时间同步误差大概在7毫秒,开源网站CockroachDB的延迟在数十毫秒,使用了NTP协议,在处理与时间敏感的数据时,chrono库成为了事实上的标准库;
  2. 由于潮汐影响和地球转矩的问题,事实上每一秒的长度不是固定的,引出了两种时间机制,一种是TAI,用于世界的原子时钟,每秒长度固定;另一种是UTC,用于通常生活中,差不多每隔18个月会添加1个闰秒,到2016年,TAI和UTC的偏差已经达到了36秒;在计算机系统中通常跑着两种时钟(clocks),一种叫实时时钟(real-time clock),根据物理设备(例如石英钟)的震动来统计时间,用于没有电源驱动的场景,一种叫系统时间(system time),系统时间根据硬件中断来增加,所有电脑上的应用获取时间都是通过system time;
  3. 9.3节介绍了几个时间有关的术语,例如Absolute timeReal-time clocksystem clockmonotonically increasingsteady clockHigh accuracyHigh resolutionfast clock 等等,对于理解各种不同的时间有很大的帮助;
  4. 时间的编码使用了2个32位integer,第一个表示秒,第二个表示n分之一秒(fraction of a second),好处有两点,简单易懂,计算高效;挑战也有两点,范围固定(有上限,因为integer宽度有限),不准确(整型是离散的而不是连续的),几个常见的表示时间的方式有,a. UNIX时间戳,32位整型,表示从1970年1月1日其的毫秒数;b. MS Windows FILETIME(从Windows 2000开始启用),64位无符号整型,表示从1601年1月1日(UTC时间)到当时的100纳秒的增量(increments);c. Rust社区的chrono库,32位有符号整型,同时带有NaiveTime的枚举类型来表示不同的时区;d. time_t类型,在C标准库libc里,不同版本也有一定区别,详见Page298;
  5. 9.5给出了应用获得系统时间的具体调用过程,如下Rust in Action笔记 第九章 时间管理,Rust in Action,rust,笔记,开发语言
  6. 获取本地时间的方法可以使用chrono::Local::now(),如果返回值是感叹号!,表示该函数永不返回,代码跑到unimplemented!()宏这里时会panic;
  7. clap::Arg或者clap::App来处理输入参数,clap::Arg可以帮助简单处理输入参数,clap::App把整个程序封装成应用,可以添加版本、参数说明、参数是否必须等要求;
  8. 可以在cargo.toml指定[target.'cfg(not(windows))'.dependencies]用于非windows操作系统编译时的依赖,同理,去掉not可以用于设置Windows操作系统的依赖;
  9. NTP有两种模式,一种是always on,采用p2p的形式来在局域网中达成一个稳定的关于"now"的共识,一种是request/response,通过向服务器发送请求(request)来获取一个中心化认可的时间戳,通过记录传输时间来校准;
  10. request/response模式有4个时间点需要记录,t1表示客户端发出request的时间戳、t2表示服务端收到客户端request的时间戳、t3表示服务端发出response的时间戳、t4表示客户端收到response的时间戳,这4个时间戳的格式在RFC2030中规定,流程如下图所示,9.9.1节提供了详细实现Rust in Action笔记 第九章 时间管理,Rust in Action,rust,笔记,开发语言11. NTP中要计算两个值, θ \theta θ δ \delta δ,如下表所示,表示从客户端到服务端的传输延迟,实际应用中会发送requests到多个server来减小单个服务的误差Rust in Action笔记 第九章 时间管理,Rust in Action,rust,笔记,开发语言

文章来源地址https://www.toymoban.com/news/detail-525273.html

到了这里,关于Rust in Action笔记 第九章 时间管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Rust】Rust学习 第九章错误处理

    Rust 将错误组合成两个主要类别: 可恢复错误 ( recoverable )和  不可恢复错误 ( unrecoverable )。可恢复错误通常代表向用户报告错误和重试操作是合理的情况,比如未找到文件。不可恢复错误通常是 bug 的同义词,比如尝试访问超过数组结尾的位置。 大部分语言并不区分这

    2024年02月13日
    浏览(27)
  • 《LKD3粗读笔记》(11)定时器和时间管理

    硬件为内核提供了一个 系统定时器 用以计算流逝的时间,该时钟在内核中可看成是一个 电子时间资源 ,比如数字时钟或处理器频率等。 系统定时器 以某种频率 自行触发 (常被称为击中(hitting)或者射中(popping)) 时钟中断 ,该频率可以通过编程预定,称作 节拍率 (

    2024年02月03日
    浏览(20)
  • python学习笔记:第九章异常

    python使用异常对象来表示异常状态,并在遇到错误时引发异常。异常对象未被处理,程序将终止并显示一条错误信息。 我们可以通过各种方法引发和捕获错误,并采取对应措施。 自主地引发异常 我们通过预测异常可能发生的位置,通过raise语句主动抛出异常,用except语句来

    2024年02月15日
    浏览(29)
  • Go语言精修(尚硅谷笔记)第九章

    map是key-value数据结构,又称为字段或者关联数组。类似其它编程语言的集合,在编程中是经常使用到 基本语法 key可以是什么类型 golang中的map,的 key 可以是很多种类型,比如 bool, 数字,string, 指针,channel, 还可以是只包含前面几个类型的 接口, 结构体, 数组 通常 key 为 int 、

    2023年04月08日
    浏览(19)
  • 《Flink学习笔记》——第九章 多流转换

    无论是基本的简单转换和聚合,还是基于窗口的计算,我们都是针对一条流上的数据进行处理的。而在实际应用中,可能需要将不同来源的数据连接合并在一起处理,也有可能需要将一条流拆分开,所以经常会有对多条流进行处理的场景 简单划分(两大类): 分流——把一

    2024年02月11日
    浏览(33)
  • 红宝石阅读笔记--第九章 代理与反射

    1. 代理中的 this 这是因为 User 实例一开始使用目标对象作为 WeakMap 的键,代理对象却尝试从自身取得这个实 例。要解决这个问题,就需要重新配置代理,把代理 User 实例改为代理 User 类本身。之后再创建代 理的实例就会以代理实例作为 WeakMap 的键了: 刚开始自己不懂什么意

    2024年02月11日
    浏览(24)
  • 《Opencv3编程入门》学习笔记—第九章

    记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 一、图像直方图概述 1、作用:   在每个兴趣点设置一个有相近特征的直方图所构成的标签,通过标记帧与帧之间显著的边缘、颜色、角度等特征的统计变化,来检测视频中场景的变化。 2、概念:

    2024年02月11日
    浏览(29)
  • go 笔记 第九章 结构体 struct 声明和使用

    package main import “fmt” type qm struct { name string age int hobby []string home } type home struct { address string } // 给结构体声明方法 func (q qm) song(name string) (ret string) { ret = “惊雷” fmt.Printf(“%v—%v–%v”, q.name, name, q.age) fmt.Println() return ret } func (h home) open() { fmt.Println(“open”) } func main() { v

    2024年02月16日
    浏览(28)
  • 【Unity每日一记】时间Time类-做时间管理大师

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月16日
    浏览(34)
  • 华为HCIA课堂笔记第九章 STP生成树

    选举一个根桥(根交换机) 每一个非根桥上选举一个根端口(去往根桥最近的端口) 在每一个链路上选举一个指定端口(向树的下游转发数据) 阻塞剩余的非根端口,非指定端口。 根桥:生成树的树根 通过比较桥ID(称为BID),选择所有的相连二层设备中的桥 ID,越小越优

    2024年01月22日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包