- 博客(79)
- 收藏
- 关注
原创 JVM:垃圾回收
可达分析算法:可达分析法需要确定根对象,根对象即那些肯定不能当作垃圾被回收的对象,垃圾回收时,会扫描堆中的所有对象,若对象被根对象直接或间接引用,就不能被回收,反之,则可以被回收(即能否沿着 GC Root对象为起点的引用链找到该对象,找不到,表示可以回收 )。**软引用(SoftReference):**仅有软引用引用该对象时,在垃圾回收后,内存仍不足时会再次出发垃圾回收,回收软引用对象;**强引用:**只有所有 GC Roots 对象都不通过【强引用】引用该对象,该对象才能被垃圾回收。
2023-06-01 15:29:01
532
1
原创 计算机网络:IP 协议
上网时通常使用的方式是域名,而不是 IP 地址,实现这一技术的就是 DNS 域名解析,DNS 可以将域名网址自动转换为具体的 IP 地址。DNS 中的域名都是用句点来分隔的,比如 ,这里的句点代表了不同层次之间的界限。在域名中,越靠右的位置表示其层级越高。根域是在最顶层,它的下一层就是 com 顶级域,再下面是 server.com。所以域名的层级关系类似一个树状结构:根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。所以,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。因此,
2023-05-15 09:15:00
332
原创 计算机网络:Ping 的工作原理
协议查询 MAC 地址,获得 MAC 地址后,由数据链路层构建一个数据帧,目的地址是 IP 层传过来的 MAC 地址,源地址则是本机的 MAC 地址;会影响的是根据目标 IP 地址,选择路由的下一跳,还有每经过一个路由器到达一个新的局域网,需要换 MAC 头里面的 MAC 地址。,第一个路由器过了,遇到第二个路由器也牺牲了,也同时返回了 ICMP 差错报文数据包,如此往复,直到到达目的主机。收到这个数据帧后,先检查它的目的 MAC 地址,并和本机的 MAC 地址对比,如符合,则接收,否则就丢弃。
2023-05-15 09:15:00
677
原创 计算机网络:Keep-Alive 与 Keepalive
HTTP 的 Keep-Alive 也叫 HTTP 长连接,该功能是由「应用程序」实现的,可以使得用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,减少了 HTTP 短连接带来的多次 TCP 连接建立和释放的开销。TCP 的 Keepalive 也叫 TCP 保活机制,该功能是由「内核」实现的,当客户端和服务端长达一定时间没有进行数据交互时,内核为了确保该连接是否还有效,就会发送探测报文,来检测对方是否还在线,然后来决定是否要关闭该连接。
2023-05-15 09:00:00
540
原创 计算机网络:IP 与 IP 地址
不管是路由器还是主机解析到一个 IP 地址时候,比如判断其 IP 地址的首位是否为 0,为 0 则为 A 类地址,那么就能很快的找出网络地址和主机地址。,比如一个公司里用了 B 类地址,但是可能需要根据生产环境、测试环境、开发环境来划分地址层次,而这种 IP 分类是没有地址层次划分的功能,所以这就。最大主机个数,就是要看主机号的位数,如 C 类地址的主机号占 8 位,那么 C 类地址的最大主机个数 = 2。路由器寻址工作中,也就是通过这样的方式来找到对应的网络号的,进而把数据包转发给对应的网络内。
2023-05-15 09:00:00
1277
原创 计算机网络:TCP 拥塞控制
快速重传算法,当接收方发现丢了一个中间包的时候,发送三次前一个包的 ACK,于是发送端就会快速地重传,不必等待超时再重传。TCP 在刚建立连接完成后,首先是有个慢启动的过程,这个慢启动的意思就是一点一点的提高发送数据包的数量。一直增长着后,网络就会慢慢进入了拥塞的状况了,于是就会出现丢包现象,这时就需要对丢失的数据包进行重传。所以,TCP 不能忽略网络上发生的事,当网络发送拥塞时,TCP 会自我牺牲,降低发送的数据量。流量控制是避免「发送方」的数据填满「接收方」的缓存,但是并不知道网络的中发生了什么。
2023-05-15 08:45:00
482
原创 计算机网络:TCP 半连接队列与全连接队列
当 TCP 全连接队列满导致服务器丢掉了 ACK,与此同时,客户端的连接状态却是 ESTABLISHED,进程就在建立好的连接上发送请求。,并向客户端响应 SYN+ACK,接着客户端会返回 ACK,服务端收到第三次握手的 ACK 后,对服务端一直发送 SYN 包,但是不回第三次握手 ACK,这样就会使得服务端有大量的处于。命令给出的统计结果中, 可以得到由于半连接队列已满,引发的失败次数。,表示共有多少个 TCP 连接因为半连接队列溢出而被丢弃。如果 SYN 半连接队列已满,只能丢弃连接吗?
2023-05-15 08:45:00
368
原创 计算机网络:滑动窗口
比如,ACK 600 确认应答报文丢失,也没关系,因为可以通过下一个确认应答进行确认,只要发送方收到了 ACK 700 确认应答,就意味着 700 之前的所有数据「接收方」都收到了。窗口的实现实际上是操作系统开辟的一个缓存空间,发送方主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据。当发送方把数据「全部」都一下发送出去后,可用窗口的大小就为 0 了,表明可用窗口耗尽,在没收到 ACK 确认之前是无法继续发送数据了。发送方发送的数据大小不能超过接收方的窗口大小,否则接收方就无法正常接收到数据。
2023-05-15 08:30:00
636
原创 计算机网络:TCP 流量控制
那么,当发生窗口关闭时,接收方处理完数据后,会向发送方通告一个窗口非 0 的 ACK 报文,如果这个通告窗口的 ACK 报文在网络中丢失了,这会导致发送方一直等待接收方的非 0 窗口通知,接收方也一直等待发送方的数据,如不采取措施,这种相互等待的过程,会造成了死锁的现象。Nagle 算法默认是打开的,如果对于一些需要小数据包交互的场景的程序,比如,telnet 或 ssh 这样的交互性比较强的程序,则需要关闭 Nagle 算法。个字节,为了传输那几个字节的数据,要搭上这么大的开销,这太不经济了。
2023-05-15 08:30:00
561
原创 计算机网络:TCP 四次挥手
如果客户端(主动关闭方)最后一次 ACK 报文(第四次挥手)在网络中丢失了,那么按照 TCP 可靠性原则,服务端(被动关闭方)会重发 FIN 报文。假设客户端没有 TIME_WAIT 状态,而是在发完最后一次回 ACK 报文就直接进入 CLOSE 状态,如果该 ACK 报文丢失了,服务端则重传的 FIN 报文,而这时客户端已经进入到关闭状态了,在收到服务端重传的 FIN 报文后,就会回 RST 报文。
2023-05-15 08:15:00
879
原创 计算机网络:TCP 重传机制
报文往返 RTT 的值」是经常变化的,因为我们的网络也是时常变化的。也就因为「报文往返 RTT 的值」 是经常波动变化的,所以「超时重传时间 RTO 的值」应该是一个。快速重传的工作方式是当收到三个相同的 ACK 报文时,会在定时器过期之前,重传丢失的报文段。,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以。如果超时重发的数据,再次超时的时候,又需要重传的时候,TCP 的策略是。在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的。在 Linux 下,可以通过。
2023-05-15 08:15:00
935
原创 计算机网络:TCP
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序如果不知道「消息的边界」,是无法读出一个有效的用户消息的。
2023-05-12 09:30:00
313
原创 计算机网络:TCP 三次握手
比较常回答的是:“因为三次握手才能保证双方具有接收和发送的能力。这回答是没问题,但这回答是片面的,并没有说出主要的原因。TCP 连接用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口大小称为连接。所以,重要的是为什么三次握手才可以初始化Socket、序列号和窗口大小并建立 TCP 连接。三次握手才可以阻止重复历史连接的初始化(主要原因)三次握手才可以同步双方的初始序列号三次握手才可以避免资源浪费原因一:避免历史连接三次握手的。
2023-05-12 09:30:00
1164
原创 计算机网络:HTTP/3
队头阻塞,HTTP/2 多个请求跑在一个 TCP 连接中,如果序列号较低的 TCP 段在网络传输中丢失了,即使序列号较高的 TCP 段已经被接收了,应用层也无法从内核中读取到这部分数据,从 HTTP 视角看,就是多个请求被阻塞了;TCP 和 TLS 握手时延,TCL 三次握手和 TLS 四次握手,共有 3-RTT 的时延;连接迁移需要重新连接。
2023-05-12 09:15:00
596
原创 计算机网络:HTTPS
为了保证传输的内容不被篡改,我们需要对内容计算出一个「指纹」,然后同内容一起传输给对方。对方收到后,先是对内容也计算出一个「指纹」,然后跟发送方发送的「指纹」做一个比较,如果「指纹」相同,说明内容没有被篡改,否则就可以判断出内容被篡改了。在计算机里会。
2023-05-12 09:15:00
619
原创 计算机网络:HTTP/2
HTTP/2 协议其实还有很多内容,比如流控制、流状态、依赖关系等等。这次主要介绍了关于 HTTP/2 是如何提升性能的几个方向,它相比 HTTP/1 大大提高了传输效率、吞吐能力。第一点,对于常见的 HTTP 头部通过静态表和 Huffman 编码的方式,将体积压缩了近一半,而且针对后续的请求头部,还可以建立动态表,将体积压缩近 90%,大大提高了编码效率,同时节约了带宽资源。
2023-05-12 09:00:00
686
原创 计算机网络:GET 和 POST
GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII,所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器会对 URL 的长度有限制(HTTP协议本身对 URL长度并没有做任何规定)。POST 请求携带数据的位置一般是写在报文 body 中, body 中的数据可以是任意格式的数据,只要客户端与服务端协商好即可,而且浏览器不会对 body 大小做限制。另外,URL 中的查询参数也不是 GET 所独有的,POST 请求的 URL 中也可以有参数的。《小林 coding》
2023-05-12 08:45:00
919
原创 计算机网络:HTTP 缓存
强缓存指的是只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。, 是一个相对时间;Expires,是一个绝对时间;如果 HTTP 响应头部同时有 Cache-Control 和 Expires 字段的话,Cache-Control的优先级高于 Expires。Cache-control 选项更多一些,所以建议使用 Cache-Control 来实现强缓存。
2023-05-12 08:45:00
676
原创 计算机网络:TCP/IP 网络分层
网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。电脑上的以太网接口,Wi-Fi接口,以太网交换机、路由器上的千兆,万兆以太网口,还有网线,它们都是以太网的组成部分。(最大报文长度,即除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度),就将数据包分块,若传输的过程中有分块丢失或损坏,就将这一分块重新传送即可,在TCP协议中,每个分块称为。
2023-05-12 08:30:00
1223
原创 计算机网络:HTTP
HTML 就是最常见的超文本了,它本身只是纯文字文件,但内部用很多标签定义了图片、视频等的链接,再经过浏览器的解释,呈现给我们的就是一个文字、有画面的网页了。类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是。,它是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。,是协议处理中的一种中间状态,实际用到的比较少。处理了客户端的请求,也是我们最愿意看到的状态。
2023-05-12 08:30:00
1050
原创 操作系统:零拷贝
磁盘的读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。还有一点,读取磁盘数据的时候,需要找到数据所在的位置,但是对于机械磁盘来说,就是通过磁头旋转到数据所在的扇区,再开始「顺序」读取数据,但是旋转磁头这个物理动作是非常耗时的,为了降低它的影响,所以,读磁盘数据的时候,优先在 PageCache 找,如果数据存在则可以直接返回;
2023-05-11 09:45:00
918
原创 操作系统:IO多路复用
线程是运行在进程中的一个“逻辑流”,单进程中可以运行多个线程,同进程里的线程可以共享进程的部分资源,比如文件描述符列表、进程空间、代码、全局数据、堆、共享库等,这些共享些资源在上下文切换时不需要切换,而只需要切换线程的私有数据、寄存器等不共享的数据,因此同一个进程下的线程上下文切换的开销要比进程小得多。这种用多个进程来应付多个客户端的方式,在应对 100 个客户端还是可行的,但是当客户端数量高达一万时,肯定扛不住的,因为每产生一个进程,必会占据一定的系统资源,而且进程间的上下文切换会影响性能。
2023-05-11 09:45:00
626
原创 操作系统:内存页面置换算法
LFU 算法只考虑了频率问题,没考虑时间的问题,比如有些页面在过去时间里访问的频率很高,但是现在已经没有访问了,而当前频繁访问的页面由于没有这些页面访问的次数高,在发生缺页中断时,就会可能会误伤当前刚开始频繁访问,但访问次数还不高的页面。这个问题的解决的办法:可以定期减少访问的次数,比如当发生时间中断时,把过去时间访问的页面的访问次数除以 2,也就说,随着时间的流失,以前的高访问次数的页面会慢慢减少,相当于加大了被置换的概率。,因为程序访问页面时是动态的,无法预知每个页面在「下一次」访问前的等待时间。
2023-05-11 09:30:00
352
原创 操作系统:Page Cache
一致性问题:如果发生写操作并且对应的数据在 Page Cache 中,那么写操作就会直接作用于 Page Cache 中,此时如果数据还没刷新到磁盘,那么内存中的数据就领先于磁盘,此时对应 page 就被称为 Dirty page。操作系统以 page 为单位管理内存,当进程发现需要访问的数据不在内存时,操作系统可能会将数据以页的方式加载到内存中。但主内存的空间是有限的,当主内存中不包含可以使用的空间时,操作系统会从选择合适的物理内存页驱逐回磁盘,为新的内存页让出位置,
2023-05-11 09:30:00
993
原创 操作系统:进程调度算法
可以发现,对于短作业可能可以在第一级队列很快被处理完。对于长作业,如果在第一级队列处理不完,可以移入下次队列等待被执行,虽然等待的时间变长了,但是运行时间也变更长了,所以该算法很好的。FCFS 对长作业有利,不利于短作业,适用于 CPU 繁忙型作业的系统,而不适用于 I/O 繁忙型作业的系统。时间片轮转调度算法是让所有的进程优先级一样,大家的运行事件都一样。但是依然有缺点,可能会导致低优先级的进程永远不会运行。是「时间片轮转算法」和「最高优先级算法」的综合和发展。《深入理解计算机系统 第3版》
2023-05-11 09:15:00
397
原创 操作系统:多线程冲突
由于互斥信号量的初始值为 1,故在第一个线程执行 P 操作后 s 值变为 0,表示临界资源为空闲,可分配给该线程,使之进入临界区。这是最简单的一种锁,一直自旋,利用 CPU 周期,直到锁可用。并且,直到第一个线程执行 V 操作,释放临界资源而恢复 s 值为 0 后,才唤醒第二个线程,使之进入临界区,待它完成临界资源的访问后,又执行 V 操作,使 s 恢复到初始值 1。若此时又有第二个线程想进入临界区,也应先执行 P 操作,结果使 s 变为负值,这就意味着临界资源已被占用,因此,第二个线程被阻塞。
2023-05-11 09:00:00
752
原创 操作系统:如何避免死锁
线程 A 和 线程 B 获取资源的顺序要一样,当线程 A 是先尝试获取资源 A,然后尝试获取资源 B 的时候,线程 B 同样也是先尝试获取资源 A,然后尝试获取资源 B。在多线程编程中,我们为了防止多线程竞争共享资源而导致数据错乱,都会在操作共享资源之前加上互斥锁,只有成功获得到锁的线程,才能操作共享资源,获取不到锁的线程就只能等待,直到锁被释放。持有并等待条件是指,当线程 A 已经持有了资源 1,又想申请资源 2,而资源 2 已经被线程 C 持有了,所以线程 A 就会处于等待状态,但是。
2023-05-11 09:00:00
635
原创 操作系统:锁
期望的是,读锁能被更多的线程持有,以便提高读线程的并发性,它的工作方式是:当读线程 A 先持有了读锁,写线程 B 在获取写锁的时候,会被阻塞,并且在阻塞过程中,后续来的读线程 C 仍然可以成功获取读锁,最后直到读线程 A 和 C 释放读锁后,写线程 B 才可以成功获取写锁。自旋锁开销少,在多核系统下一般不会主动产生线程切换,适合异步、协程等在用户态切换请求的编程方式,但如果被锁住的代码执行时间过长,自旋的线程会长时间占用 CPU 资源,所以自旋的时间和被锁住的代码执行的时间是成「正比」的关系。
2023-05-11 09:00:00
739
原创 操作系统:进程间的通信方式
克服了管道通信的数据是无格式的字节流的问题,消息队列实际上是保存在内核的「消息链表」,消息队列的消息体是可以用户自定义的数据类型,发送数据时,会被分成一个一个独立的消息体,当然接收数据时,也要与发送方发送的消息体的数据类型保持一致,这样才能保证读取的数据是正确的。Socket 实际上不仅用于不同的主机进程间通信,还可以用于本地主机进程间通信,可根据创建 Socket 的类型不同,分为三种常见的通信方式,一个是基于 TCP 协议的通信方式,一个是基于 UDP 协议的通信方式,一个是本地进程间通信方式。
2023-05-11 08:45:00
78
原创 操作系统:线程
*线程是进程当中的一条执行流程。**同一个进程内多个线程之间可以共享代码段、数据段、打开的文件等资源,但每个线程各自都有一套独立的寄存器和栈,这样可以确保线程的控制流是相对独立的。一个进程中可以同时存在多个线程;各个线程之间可以并发执行;各个线程之间可以共享地址空间和文件等资源;当进程中的一个线程崩溃时,会导致其所属进程的所有线程崩溃(这里是针对 C/C++ 语言,Java语言中的线程奔溃不会造成进程崩溃)
2023-05-11 08:30:00
110
原创 操作系统:预读机制与预读失效
如果预读的页一直没有被访问,就会从 inactive list 移除,这样就不会影响 active list 中的热点数据。如果使用传统的 LRU 算法,就会把「预读页」放到 LRU 链表头部,而当内存空间不够的时候,还需要把末尾的页淘汰掉。MySQL Innodb 存储引擎的 Buffer Pool 也有类似的预读机制,MySQL 从磁盘加载页时,会提前把它相邻的页一并加载进来,目的是为了减少磁盘 IO。如果预读的页一直没有被访问,就会从 old 区域移除,这样就不会影响 young 区域中的热点数据。
2023-05-10 09:45:00
519
原创 操作系统:缓存污染
虽然 Linux (实现两个 LRU 链表)和 MySQL (划分两个区域)通过改进传统的 LRU 数据结构,避免了预读失效带来的影响。但是如果还是使用「只要数据被访问一次,就将数据加入到活跃 LRU 链表头部(或者 young 区域)」这种方式的话,那么还存在缓存污染的问题。当我们在批量读取数据的时候,由于数据被访问了一次,这些大量数据都会被加入到「活跃 LRU 链表」里,然后之前缓存在活跃 LRU 链表(或者 young 区域)里的热点数据全部都被淘汰了,
2023-05-10 09:45:00
268
原创 操作系统:进程
比如有一个会读取硬盘文件数据的程序被执行了,那么当运行到读取文件的指令时,就会去从硬盘读取数据,但是硬盘的读写速度是非常慢的,如果 CPU 傻傻的等硬盘返回数据的话,那 CPU 的利用率是非常低的。当硬盘数据返回时,CPU 会收到个。而当父进程被终止时,该父进程的子进程就变为孤儿进程,会被 1 号进程收养,并由 1 号进程对它们完成状态收集工作。通常会把交换的信息保存在进程的 PCB,当要运行另外一个进程的时候,我们需要从这个进程的 PCB 取出上下文,然后恢复到 CPU 中,这使得这个进程可以继续执行。
2023-05-10 09:45:00
580
原创 操作系统:malloc()
因为向操作系统申请内存,是要通过系统调用的,执行系统调用是要进入内核态的,然后在回到用户态,运行态的切换会耗费不少时间。只有在访问已分配的虚拟地址空间的时候,操作系统通过查找页表,发现虚拟内存对应的页没有在物理内存中,就会触发缺页中断,然后操作系统会建立虚拟内存和物理内存之间的映射关系。另外,因为 mmap 分配的内存每次释放的时候,都会归还给操作系统,于是每次 mmap 分配的虚拟地址都是缺页状态的,然后在第一次访问该虚拟地址的时候,就会触发缺。两部分,不同位数的系统,地址空间的范围也不同。
2023-05-10 09:30:00
630
原创 操作系统:内存满了怎么办
随着 CPU 处理器核数的增多,多个 CPU 都通过一个总线访问内存,这样总线的带宽压力会越来越大,同时每个 CPU 可用带宽会减少,这也就是 SMP 架构的问题。从文件页和匿名页的回收操作来看,文件页的回收操作对系统的影响相比匿名页的回收操作会少一点,因为文件页对于干净页回收是不会发生磁盘 I/O 的,而匿名页的 Swap 换入换出这两个操作都会发生磁盘 I/O。回收内存的操作基本都会发生磁盘 I/O 的,如果回收内存的操作很频繁,意味着磁盘 I/O 次数会很多,这个过程势必会影响系统的性能。
2023-05-10 09:30:00
782
原创 操作系统:中断
中断是操作系统用来响应硬件设备请求的一种机制,操作系统收到硬件的中断请求,会打断正在执行的程序,然后调用内核中的中断处理程序来响应请求。中断是一种异步的事件处理机制,可以提高系统的并发处理能力。系统收到了中断请求会打断其他程序,所以中断的响应程序,要尽可能快的执行完,减少对正常程序运行的调度影响。并且,中断处理程序在响应中断时,会临时关闭中断,即如果系统当前的中断程序没执行完的话,其他中断无法被响应,即中断有可能会丢失,所以中断处理程序要短且快。用来快速处理中断。
2023-05-10 09:15:00
414
原创 操作系统:二进制数问题
不是的,0.1 和 0.2 这两个数字用二进制表达会是一个一直循环的二进制数,比如 0.1 的二进制表示为 0.0 0011 0011 0011…(0011 无限循环),0.1 无法精确表达,这是浮点数计算造成精度损失的根源。因此,IEEE 754 标准定义的浮点数只能根据精度舍入,然后用「近似值」来表示该二进制,那么意味着计算机存放的小数可能不是一个真实值。只能采用近似数的方式来保存,那两个近似数相加,得到的必然也是一个近似数。,名字里的「浮点」表示小数点是可以浮动的。由于计算机的资源是有限的,所以是。
2023-05-10 09:15:00
272
原创 操作系统:虚拟内存
的环境下,一个进程的页表需要装下 100 多万个「页表项」,并且每个页表项是占用 4 字节大小的,于是相当于每个页表需占用 4MB 大小的空间。但是由于每个段的长度不固定,所以多个段未必能恰好使用所有的内存空间,会产生了多个不连续的小物理内存,导致新的程序无法被装载,所以会出现。如果程序要访问虚拟地址的时候,由操作系统转换成不同的物理地址,这样不同的进程运行的时候,写入的是不同的物理地址,这样就不会产生冲突。有了 TLB 后,那么 CPU 在寻址时,会先查 TLB,如果没找到,才会继续查常规的页表。
2023-05-10 09:15:00
476
原创 MySQL:主备中的循环复制问题
双M结构存在一个问题。在节点A上更新了一条语句,然后再把生成的binlog 发给节点B,节点B执行完这条更新语句后也会生成binlog。那么,如果节点A同时是节点B的备库,相当于又把节点B新生成的binlog拿过来执行了一次,然后节点A和B间,会不断地循环执行这个更新语句,也就是。若 A 和 B 互为主备关系,则在主备一致的过程中,可能会出现循环复制的问题,那么如何解决呢?binlog的特性确保了在备库执行相同的binlog,可以得到与主库相同的状态。《MySQL 必知必会》《MySQL 45讲》
2023-05-10 09:00:00
687
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人