<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[tobe98的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/tobe98</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; tobe98]]></copyright><item><title><![CDATA[多图预警——从 RAID 到分布式系统中的副本分布]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/104472060</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/104472060</guid><author>tobe98</author><pubDate>Mon, 24 Feb 2020 09:30:34 +0800</pubDate><description><![CDATA[原文首发于个人博客「tobe的呓语」欢迎大家的访问收藏啊~
我们知道，在面对大规模数据的计算和存储时，有两种处理思路：

垂直扩展（scale up）：通过升级单机的硬件，如 CPU、内存、磁盘等，提高计算机的处理能力。
水平扩展（scale out）：通过添加更多的机器到分布式系统中，提高整个系统的处理能力。





在分布式技术尚未成熟的时候，小型机、中型机、大型机、超级计算机逐步升级的方案...]]></description><category></category></item><item><title><![CDATA[浅谈 MySQL 的事务与 ACID]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/103890902</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/103890902</guid><author>tobe98</author><pubDate>Wed, 08 Jan 2020 14:35:01 +0800</pubDate><description><![CDATA[最近把个人博客搭建好了，链接在这里：tobe的呓语，文章会先在博客和公众号更新~ 希望大家多多收藏啊
所谓事务（Transaction），就是通过确保成批的操作要么完全执行，要么完全不执行，来维护数据库的完整性。举一个烂大街的例子：A 向 B 转账 1000 元，对应的 SQL 语句为：（没有显式定义事务）
UPDATE deposit_table set deposit = deposit - ...]]></description><category></category></item><item><title><![CDATA[详解 TCP 超时与重传机制——长文预警]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/103580965</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/103580965</guid><author>tobe98</author><pubDate>Tue, 17 Dec 2019 15:13:33 +0800</pubDate><description><![CDATA[上一篇介绍 TCP 的文章「TCP 三次握手，四次挥手和一些细节」反馈还不错，还是蛮开心的，这次接着讲一讲关于超时和重传那一部分。

我们都知道 TCP 协议具有重传机制，也就是说，如果发送方认为发生了丢包现象，就重发这些数据包。很显然，我们需要一个方法来「猜测」是否发生了丢包。最简单的想法就是，接收方每收到一个包，就向发送方返回一个 ACK，表示自己已经收到了这段数据，反过来，如果发送方一段时间...]]></description><category></category></item><item><title><![CDATA[TCP 的三次握手，四次挥手和重要的细节—干货满满，建议细读]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/103478805</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/103478805</guid><author>tobe98</author><pubDate>Tue, 10 Dec 2019 16:59:01 +0800</pubDate><description><![CDATA[上一次讲了 UDP 协议，从这次开始，就要讲 TCP 协议了，因为 TCP 协议涉及到的东西很多，一篇文章概括不完，所以我把 TCP 协议的内容分成好几个部分，逐个击破。
TCP 报文段结构
一谈到 TCP 协议，大家最先想到的词就是「面向连接」和「可靠」。没错，TCP 协议的设计就是为了能够在客户端和服务器之间建立起一个可靠连接。
在讲连接过程之前，我们先来看看 TCP 的报文段结构，通过这个结...]]></description><category></category></item><item><title><![CDATA[UDP 协议的那点事儿]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/103285120</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/103285120</guid><author>tobe98</author><pubDate>Wed, 27 Nov 2019 22:48:34 +0800</pubDate><description><![CDATA[最近在回顾计算机网络的知识，以前上课没有认真学，只记得几个高大上的术语，所以趁着这次回顾，把学到的知识用博客的形式记录下来，一来加深自己的印象，二来希望让你对这些基础知识有一个更深入的了解。当然，我会尽量把 UDP 协议讲清楚，讲明白，让你“不虚此行”。


UDP（ User Datagram Protocol ）协议，翻译过来就是用户数据报协议 ，跟 TCP 协议一样，都是位于 OSI 模型的...]]></description><category></category></item><item><title><![CDATA[彩票调度算法，让进程们拼手气？——分享一个有趣的进程调度算法]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/102898451</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/102898451</guid><author>tobe98</author><pubDate>Mon, 04 Nov 2019 16:11:33 +0800</pubDate><description><![CDATA[这篇文章主要想介绍下彩票调度（个人觉得这个算法非常有意思~ ），还有随机算法相对传统算法的一点优势，毕竟现在绝大多数算法都是追求确定性，尤其在操作系统，大家都希望一切可控，所以随机算法的出现听起来有些“不合时宜”，但它确实能够解决某些传统算法难以解决的边角问题（算是给自己挖个坑，以后可能会写），也为我们提供了一种新的思路。

以下是正文：

进程调度器今天突然召集大伙，说是要讨论一件重要的事情，问...]]></description><category></category></item><item><title><![CDATA[Python 的多线程是鸡肋？]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/102846282</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/102846282</guid><author>tobe98</author><pubDate>Thu, 31 Oct 2019 21:25:29 +0800</pubDate><description><![CDATA[1.


“唉，还没毕业就受到甲方的支配，等以后进了公司可咋整啊。”小白嘴里这么吐槽，但心理上还是不敢怠慢，只能恋恋不舍地关掉眼前的游戏，打开了 Python 代码思考了起来。

“现在的程序是单线程的，那就用多线程模型来优化吧，嘿嘿，我太机智了！”小白打心底感谢前段时间里学习到的线程的知识。“Python 里好像是 threading 模块负责多线程的，就决定是你了，threading ！”

...]]></description><category></category></item><item><title><![CDATA[互斥那点事儿（下）]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/102678923</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/102678923</guid><author>tobe98</author><pubDate>Tue, 22 Oct 2019 11:12:15 +0800</pubDate><description><![CDATA[“我找到好办法了！”

没有想到，说话的人竟然是磁盘！

进程调度器瑟瑟的说：“你有方法？还是算了吧，我怕用你的方法操作系统要乱套了。”

磁盘委屈的道：“不就是刚刚冤枉你了吗，这么小气干什么！再说了，这个方法不是我想出来的，是我从文件里找到的。”

操作系统挑了挑眉毛：“哦？你找到什么文件了，让大家也瞅瞅？”

磁盘嗡嗡的转起来，很快就把文件取出来了。

“当当当当~ 这可是大师 Dijkstr...]]></description><category></category></item><item><title><![CDATA[互斥那点事儿（上）]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/102620535</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/102620535</guid><author>tobe98</author><pubDate>Fri, 18 Oct 2019 10:26:30 +0800</pubDate><description><![CDATA[本年度第 10 次操作系统成员会议开始啦！

一月一度的会议旨在让大家互相交流，解决最近在工作中出现的问题，以提高整个计算机系统的工作效率。因为计算机硬件在飞速发展，而操作系统是连接计算机硬件和应用程序的中间层，如果故步自封，很快就会被市场淘汰，所以每位操作系统成员都很重视月度会议。

这次提出问题的是进程和线程两兄弟。

站在众人前面，线程显得有些怯场，他戳了戳进程，示意让他先来讲。进程迅速整理...]]></description><category></category></item><item><title><![CDATA[用户级线程和内核级线程，你分得清吗？]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/102529371</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/102529371</guid><author>tobe98</author><pubDate>Sun, 13 Oct 2019 08:39:28 +0800</pubDate><description><![CDATA[这篇文章是上一篇博客的补充，旨在把没有讲清楚的「用户级线程和内核级线程」补充完整。希望读者能对线程有更进一步的了解。


小白最近在学习多线程编程。

网上关于多线程的资料很多，小白很快就把线程的基本概念弄懂了，但关于「用户级线程和内核级线程」的概念，她却怎么也搞不清楚，只好向操作系统基础扎实的小明请教。

对于小白的问题，小明总会耐心解答：“线程里面这两个概念确实比较难理解，我先给你讲用户级线程...]]></description><category></category></item><item><title><![CDATA[线程的来龙去脉，你了解吗？]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/102492640</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/102492640</guid><author>tobe98</author><pubDate>Thu, 10 Oct 2019 23:03:07 +0800</pubDate><description><![CDATA[进程最近有些烦恼，整日愁眉苦脸的，拜访内存的时候也有点心不在焉。

内存是个明眼人，开门见山的问道：“进程啊，最近遇到啥问题了？我看你最近情绪有点低落，有啥问题你就直接说出来嘛，我让大家伙儿来一起帮你想想办法。”

进程叹了口气，说道：“唉，最近不是说 CPU 单核频率到瓶颈了吗？人类就用多核芯来弥补单核处理器性能的不足，咱们的 CPU 不也升级到四核了嘛。”

“是啊，这是好事啊，现在最多能并行...]]></description><category></category></item><item><title><![CDATA[进程调度， 一个调度器的自白]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/101632841</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/101632841</guid><author>tobe98</author><pubDate>Sat, 28 Sep 2019 19:27:59 +0800</pubDate><description><![CDATA[我是一个进程调度器。

我的职责是调度计算机内所有的进程，为他们分配 CPU 资源。

1. 批处理时代
想当初，操作系统创造我时，只是打算让我用 FCFS 调度算法，简单维护下进程的秩序。但我后来的发展，远远超过了他的想象。

1.1 FCFS
所谓 FCFS 就是「先来先服务（First Come First Serve）」，每个进程按进入内存的时间先后排成一队。每当 CPU 上的进程运行完毕...]]></description><category></category></item><item><title><![CDATA[操作系统学习（二）--进程描述和执行]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/101478918</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/101478918</guid><author>tobe98</author><pubDate>Thu, 26 Sep 2019 21:39:09 +0800</pubDate><description><![CDATA[这是操作系统系列第 2 篇。
如果你想知道操作系统每天都在做些什么，那就打开你的资源监视器：
资源监视器截图，Windows 10

单独通过这一张图，我们就能够总结出操作系统的几个重要功能：

进程管理
线程管理
内存管理
I/O 管理（包含了磁盘调度）
文件管理，这一功能在图里没有表现出来，但我相信每个使用计算机的人都知道它。



为什么我要从进程开始讲起呢？

原因很简单，我们每天使用计算...]]></description><category></category></item><item><title><![CDATA[操作系统学习（一）-- 从发展史理解操作系统设计需求]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/101312090</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/101312090</guid><author>tobe98</author><pubDate>Tue, 24 Sep 2019 20:52:50 +0800</pubDate><description><![CDATA[这是操作系统系列第 1 篇。

尽管操作系统发展史不是研究操作系统的重点，但是在这一发展过程中，衍生出了许许多多与操作系统相关的重要概念，如果知道这些概念出现在怎样的背景下，以及产生的原因，在后期学习中就不会觉得一些概念出现的比较突兀。除此之外，了解操作系统的发展史，理解设计需求，有助于我们站在计算机的角度思考问题。

ENIAC 与串行处理
计算机的发展可以追溯到 1946 年，世界上第一台通用...]]></description><category></category></item><item><title><![CDATA[函数，从编辑到编译 (下) -- 一文带你了解编译 链接]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/101162185</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/101162185</guid><author>tobe98</author><pubDate>Sun, 22 Sep 2019 16:21:29 +0800</pubDate><description><![CDATA[上篇的链接在这里：函数，从编辑到编译 (上) --带你了解预编译做了什么
下面继续：
2. 编译
所谓编译过程，就是把预处理完的文件进行一系列词法分析，语法分析，语义分析及优化后生产相应的汇编代码文件。这一步是整个程序构建的核心部分，也是最容易出错的一部分。

从现在开始，步骤就变得十分复杂了。

对函数来说，这一阶段是最繁琐也是最为危险的：稍有不慎，轻则 warning 重则 error 。

...]]></description><category></category></item><item><title><![CDATA[函数，从编辑到编译 (上) --带你了解预编译做了什么]]></title><link>https://blog.youkuaiyun.com/tobe98/article/details/101118574</link><guid>https://blog.youkuaiyun.com/tobe98/article/details/101118574</guid><author>tobe98</author><pubDate>Sat, 21 Sep 2019 20:46:29 +0800</pubDate><description><![CDATA[0. 序
我从一生下来就呆在这个昏暗的地方。
我不明白为什么程序员这么喜欢 Dark Mode，Brighten Mode 才是我的最爱。听说最近连 iphone 都开始支持 Dark Mode 了，没话讲。。。说好的绝不妥协呢？
我周围是熙熙攘攘的函数群，穿插着变量声明和宏定义。
在我们这里，函数是一等公民。
当然，不光在 C++，在面向过程的 C 语言、面向对象的 Java ，尤其是在那些函数...]]></description><category></category></item></channel></rss>