黑白之院

Valar Morghulis


  • 首页

  • 归档

  • 分类

  • 标签

  • 收藏

  • 关于

Linux 调度器学习资料整理

发表于 2019-11-05 | 分类于 Linux
| 字数统计: 535 | 阅读时长 ≈ 1

引言

系统中的 CPU 数量有限,而用户希望「同时」得到服务的进程(任务)常常会多于可用的 CPU 核数,这时就需要聪明的任务调度器来为我们实现 CPU 虚拟化,让每个进程都能得到服务。调度器需要照顾到任务的响应时间(否则用户会在敲击键盘后等很久,体验很渣),还要保证一定的周转时间(CPU 密集型的任务期望获得更多的连续运行时间,从而利用 CPU 缓存亲和性,频繁的任务切换会导致一些性能损失,尤其是现代系统 TLB miss, Page Fault 惩罚非常严重),同时还不能让某些低优先级的任务饿死。可见调度器是实现多任务的核心,现代操作系统必备。

阅读全文 »

Linux Kernel Development 学习与总结

发表于 2019-10-30 | 分类于 Linux
| 字数统计: 8.5k | 阅读时长 ≈ 30

引言

最近抽时间把 Operating Systems: Three Easy Pieces 终于看完了(其实 2017 年就知道它了,没想到拖到了 2019 年 😅),全书分三个部分(虚拟化、并发、持久化)对操作系统的一些通用设计思想进行了介绍,学完后,对于进程、内存虚拟化、并发、文件系统有了更加深刻的认识。但是,真实的世界是什么样子的呢?这就是希望在阅读《Linux 设计与实现》(Linux Kernel Development)后找到想要的答案。当然,在学习中也针对很多部分搜集了不少学习资料,整理在文后,方便加深理解。

阅读全文 »

限流算法学习:漏桶 & 令牌桶算法

发表于 2019-10-11 | 分类于 Web 开发
| 字数统计: 904 | 阅读时长 ≈ 4

引言

本节主要学习下两种常用的单机限流思想,分别是漏桶算法和令牌桶算法。此外,还将给出使用 Python 及 Go 语言实现,便于加深理解。当然,现实中肯定不能直接用下面的代码。实际应用时,我们不大可能在单机执行限流,下面的实现也并非线程或 goroutine 安全的。

阅读全文 »

使用 Go 语言实现一个简单的 LRU Cache

发表于 2019-09-22 | 分类于 Go
| 字数统计: 822 | 阅读时长 ≈ 3

引言

LRU (Least-Recently-Used) Cache 是经常使用的一种内存缓存,可以将一些热点数据存放在其中,进而提高接口的响应速度。在实际应用中,cache miss 后,实际可能会回源到 Redis 集群获取缓存数据,如果 Redis 集群也没有,才会回源数据库。也就是引入 LRU Cache 后相当于给应用层添加了一级高速缓存。当然,更为实际一点的是,我们需要使用的是带有过期时间的 LRU Cache,否则后台更新了课程数据,由于内存缓存的原因而得不到及时更新。

阅读全文 »

Python 标准库源码之 threading 模块

发表于 2019-09-14 | 分类于 Python
| 字数统计: 3.8k | 阅读时长 ≈ 19

引言

虽然说 Python 受限于 CPython 的实现,存在的 GIL 会导致我们在使用多线程的时候,没法利用多核跑多线程。但是有的时候还是会用到线程的,尤其是针对一些 I/O 密集型的任务,也可以使用它们。

在使用多线程编程时,我们随时需要注意竞态条件(race condition)和数据竞争(data race)的问题,前者会导致我们在不同的时间点运行程序得到的输出可能不同;而后者则更为可怕,容易导致共享的数据结构被错误修改,甚至导致程序崩溃或者出现莫名其妙的 Bug。这个时候自然就要用到 Python threading 模块为我们提供的若干同步原语了。

阅读全文 »

1…456…10
iFaceless

iFaceless

47 日志
16 分类
75 标签
RSS
GitHub 邮箱 专栏
常用链接
  • Lingering Fragments
  • The Morning Paper
  • freeCodeCamp
  • Draveness's Blog
© 2018 — 2020 黑白之院(iFaceless)
由 Hexo 强力驱动
|
主题 — NexT.Mist
0%