标签: Linux

17 篇文章

存储深层剖析
如今主流的三种存储类型分别是:块存储、文件存储和对象存储。这三者都是分布式存储中的概念,由不同的网络存储协议实现。 注意分布式存储指的是底层的存储系统,为了满足不同的访问需求,往往一个分布式存储系统,可以同时提供文件存储、块存储和对象存储这三种形式的服务。因为要存放的数据非常多,单一服务器所能连接的物理介质是有限的,提供的 IO 性能也是有限的,所…
RaftKV-分布式存储
模块化 Raft 集群 kvServer Clerk 客户端 上层 kv 数据库 RPC 一次请求的简化流程图: 客户端请求 (Put / Get / Append) ↓ KvServer::PutAppend() / Get() ↓ KvServer → Raft::Start() 发起日志追加请求 ↓ Raft (复制日志,达成多数派一致) ↓…
网络编程深层剖析
为什么需要 EPOLLONESHOT? epoll 有两种触发的方式:LT(水平触发)和ET(边缘触发)。对于前者,只要存在着事件就会不断的触发,直到处理完成;而后者只触发一次相同事件,或者说只在从非触发到触发两个状态转换的时候才触发。 想象这样一种情况,当前是多线程在处理,一个 socket 事件到来,数据开始解析。这时候这个 socket 又来…
贼贼贼简单的多人聊天室
Linux Server epoll实现多路复用 Windows Client 初始化Windows下的socket环境 #pragma comment(lib, "Ws2_32.lib") int main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequeste…
MySQL笔记
命令 DDL-定义数据库、表结构 数据库操作 查询所有数据库:SHOW DATABASES; 查询当前数据库:SELECT DATABASE(); 创建数据库:CREATE DATABASE 数据库名; 使用数据库:USE 数据库名; 删除数据库:DROP DATABASES 数据库名; 表操作 查询 查询当前数据库内所有表:SHOW TABLES…
基于 Linux 的轻量级 HTTP 服务器
要点 1.服务器程序通常需要处理三类事件:I/O事件,信号及定时事件。有两种事件处理模式: Reactor模式:要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生(可读、可写),若有,则立即通知工作线程(逻辑单元),将socket可读可写事件放入请求队列,交给工作线程处理。 Proactor模式:将所有的I/O操作都交给主线程和内核来…
Linux网络编程 Part5 libevent
概述 优点: 开源 精简 支持跨平台 专注于网络通信 源码包安装步骤:可参考具体README文件 ./configure检查安装环境,生成makefile make生成.o和可执行文件 sudo make install 将必要的资源拷贝至系统指定目录 进入sample目录,运行demo验证是否安装成功 编译使用库的.c时,需要加-levent选项…
Linux网络编程 Part4 高并发服务器之二
线程池并发服务器 为什么要引入线程池,不直接用之前的多线程并发? 因为多线程并发要频繁地对线程进行创建与销毁(一旦有客户端传来需求,就创建一个新线程,通信结束就立刻销毁该线程),这会占用大量的CPU时间并导致不必要的系统开销 相关结构体 线程池结构体:描述线程池相关信息 pthread_mutex_t lock; /* 用于锁住本结构体 */ pt…