基于锁的并发数据结构
互斥锁提供了互斥:一次只能有一个线程获得互斥锁。互斥锁保护数据结构是通过显式地阻止对它所保护数据的真正并发访问来实现的。这称为串行化:线程轮流访问被互斥锁保护的数据。它们必须串行而非并发的访问它。因此,必须仔细考虑数据结构的设计,使得能够真正的并发访问。虽然有些数据结构比其他数据结构具有更大的并发范围,但在所有情况下,其思想都是相同的:受保护的区域越小,串行化的操作就越少,并发的潜力也就越大。
Redis哨兵
此前,我们非常依赖主服务器,因为所有的写命令都首先会给主服务器,那如果主服务器死掉,其它从服务器该怎么办?顶替!选择一个从服务器来担任主服务器的职责。Redis 提供哨兵机制(哨兵其实是一个运行在特殊模式下的 Redis 进程,所以它也是一个节点),它会检测主节点是否存活,如果发现主节点挂掉,就会选举一个从节点切换为主节点,并且把新主节点的相关信息通知给从节点和客户端。总结就是主要负责三件事情:监控、选主、通知
Redis主从复制
之前介绍 Redis 持久化是针对单台主机,如果这台主机死掉,不能对外提供服务,那持久化策略也没有发挥的余地。为了避免这种情况,那就需要能够有多台 Redis 服务器,哪怕其中一台死掉,再选择一个允许正常的 Redis 服务器顶上,继续正常服务。但我们必须要保证数据的一致性,所以引出接下来介绍的主从复制
进程池和文件下载
结合学过的文件操作、网络通信、以及进程和线程的知识, 实现一个基本的文件下载服务器模型。尽管线程池才是最常用的,但先从进程池谈起
epoll的使用
彻底讲清楚epoll
select的使用
彻底讲清楚 select
冯·诺依曼体系结构
冯·诺依曼体系结构又名存储程序计算机,这里面其实暗含了两个概念,一个是“可编程”计算机,一个是“存储”计算机
数据库和缓存如何保持一致性?
先更新数据库,再删除缓存也是会出现数据不一致性的问题,但是在实际中,这个问题出现的概率并不高。因为缓存的写入通常要远远快于数据库的写入
HTTPS通信流程
简单来讲,非对称加密完成客户端对称加密的密钥交换,双方后续就用对称加密的方式进行通信
底层基于TCP协议的Socket通信流程
不是介绍接口,而是讲原理
1234514