【2023-03-24】线、进程切换,redis底层数据结构,DNS解析

news/2024/11/8 12:08:19/

线、进程切换

进程切换与线程切换的一个最主要区别就在于进程切换涉及到虚拟地址空间的切换而线程切换则不会。因为每个进程都有自己的虚拟地址空间,而线程是共享所在进程的虚拟地址空间的,因此同一个进程中的线程进行线程切换时不涉及虚拟地址空间的转换。

举一个不太恰当的例子,线程切换就好比你从主卧走到次卧,反正主卧和次卧都在同一个房子中(虚拟地址空间),因此你无需换鞋子、换衣服等等。但是进程切换就不一样了,进程切换就好比从你家到别人家,这是两个不同的房子(不同的虚拟地址空间),出发时要换好衣服、鞋子等等,到别人家后还要再换鞋子等等。

因此我们可以形象的认为线程是处在同一个屋檐下的,这里的屋檐就是虚拟地址空间,因此线程间切换无需虚拟地址空间的切换;而进程则不同,两个不同进程位于不同的屋檐下,即进程位于不同的虚拟地址空间,因此进程切换涉及到虚拟地址空间的切换,这也是为什么进程切换要比线程切换慢的原因。

现在我们已经知道了进程都有自己的虚拟地址空间,把虚拟地址转化为物理地址需要查找页表,页表查找是一个很慢的过程,因此通常使用Cache来缓存常用的地址映射,这样可以加速页表查找,这个Cache就是TLB,Translation Lookaside Buffer,我们不需要关心这个名字,只需要知道TLB本质上就是一个cache,是用来加速页表查找的。由于每个进程都有自己的虚拟地址空间,那么显然每个进程都有自己的页表,那么当进程切换后页表也要进行切换,页表切换后TLB就失效了,cache失效导致命中率降低,那么虚拟地址转换为物理地址就会变慢,表现出来的就是程序运行会变慢,而线程切换不会导致TLB失效,因为线程无需切换地址空间,因此我们通常说线程切换比进程切换快,原因就在这里。

引用地址:https://www.cnblogs.com/MrLiuZF/p/15190499.html

redis数据结构

String:在Redis中String是可以修改的,称为动态字符串(Simple Dynamic String 简称 SDS),说是字符串但它的内部结构更像是一个 ArrayList,内部维护着一个字节数组,并且在其内部预分配了一定的空间,以减少内存的频繁分配。

  • 当字符串的长度小于 1MB时,每次扩容都是加倍现有的空间。

  • 如果字符串长度超过 1MB时,每次扩容时只会扩展 1MB 的空间。

    这样既保证了内存空间够用,还不至于造成内存的浪费,字符串最大长度为 512MB.

List:双向链表 / 压缩链表(元素个数小于512个,每个元素的值小于64字节)

Hash:Hash用来存储一组数据对,每个数据对又包含键和值两部分。Hash也有两种实现方式:压缩列表和哈希表。

SortSet:跳表和压缩列表。

Set:有两种实现方式:有序数组和哈希表。

跳表:跳表是在链表的基础上,增加了多级索引,通过在多级索引上跳来跳去,来加快查找速度。

DNS解析

首先会搜索浏览器自身的DNS缓存–>系统自身的DNS服务器–>顶级域名服务器–>域名提供商

查询方式分两种,递归查询(按照查询过程一层一层的返回)和迭代查询(查询后直接返回)


http://www.ppmy.cn/news/53083.html

相关文章

Matplotlib绘图库的高级使用

Matplotlib绘图库的高级使用 Matplotlib的三层结构容器层辅助显示层图像层 Matplotlib的绘图配置设置画布属性绘图保存自定义x与y刻度解决中文显示异常网格显示多次plot绘图标记显示图例多个坐标系显示 Matplotlib的三层结构 Matplotlib从层次结构上分,可以分为三层…

Docker Error,could not select device driver ““ with capabilities: [[gpu]]

在启动docker的时候: docker run -itd --rm --name test --gpus all .....报错,docker: Error response from daemon: could not select device driver ““ with capabilities: [[gpu]] 相关的博客不少,可以参考。 https://blog.csdn.ne…

【深度学习】点云PointNet从0到1

文章目录 前言1 PointNet1.1 点云的数据集1.2 点云的挑战1.1 网络结构 前言 直接处理点云数据的深度学习技术PointNet End To end Learning for scattered, unordered point data Unified franework for various tasks Point-Based Methods 分为 PointNet 和 Poin…

vite4+vue3:从0到1搭建vben后台管理系统

从0到1带你学习如何搭建vben后台管理系统系列文章目录 一.准备工作:技术选型基础环境的搭建 文章目录 从0到1带你学习如何搭建vben后台管理系统系列文章目录一.准备工作:技术选型基础环境的搭建 前言一、技术选型二、生成基础项目三、安装步骤跑起项目 总结 前言 前端日趋复杂…

一分钟教你玩转组合图表

在日常工作中,有时候单一的图表类型无法满足多维度的数据展示,这时候就要考虑使用组合图表。 什么是组合图表呢? 就是将两种及两种以上的图表类型组合起来绘制在一个图表上。 下面我们通过经典的柱线组合图来手把手教会你如何制作组合图表。 …

【车载助手形象系列二】---车载助手数智人形象制作可以使用AI绘图替代?

上期分享了《车载助手形象系列:数智人入门级介绍》,本期主要讲解下数智人形象制作过程 数字人形象 数智人覆盖了卡通、二次元、写实等多元化风格的虚拟形象,可高精度还原表情和躯干动作,提供涵盖人物设计、3D制作、内容制作、IP运…

超火爆的ChatGPT课,送ChatGPT账号啦~~

HOT! HOT! HOT! 🔥 🔥 🔥 上周,ChatGPT全栈开发课程一经推出,就在程序员圈子中引起了广泛关注。这两天 都被挤爆了,纷纷表示对课程内容很是期待呢。 明天就要开班直播啦,还未报名的同学&…

BM38-在二叉树中找到两个节点的最近公共祖先

题目 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。 数据范围:树上节点数满足 1≤n≤10^5 , 节点值val满足区间 [0,n) 要求:时间复杂度 O(n) 注:本题保证二叉树…