MENU

Redis5之stream数据结构

redis中stream数据结构用于实现消息队列,当然之前版本也存在有pubsub(发布订阅方式的消息队列),而这个stream的设计引进类似kafka中的消费组

引用来自官方:Consumer groups were initially introduced by the popular messaging system called Kafka (TM). Redis reimplements a similar idea in completely different terms, but the goal is the same: to allow a group of clients to cooperate consuming a different portion of the same stream of messages.

阅读全文

POSIX线程

基础函数

  • pthread_create用于创建一个线程。
    • pthread_t *tid:线程id的类型为pthread_t,通常为无符号整型,当调用pthread_create成功时,通过*tid指针返回。
    • const pthread_attr_t *attr:指定创建线程的属性,如线程优先级、初始栈大小、是否为守护进程。通过使用NULL作为默认值。
    • void *(*func)(void *):函数指针func,指定当新的线程创建之后,将执行的函数。
    • void *arg:线程将执行的函数的参数。

阅读全文

C++ socket编程常用函数

前言

将最近经常使用到的常见socket编程函数做一个笔记记录。

socket

创建进程的套接字描述符。

int socket(int domain, int type, int protocol);

domain:协议族,常用的AF_INET(对应ipv4地址)、AF_INET6(对应ipv6地址)。
type:socket类型,常用的面向连接的流式Socket(SOCK_STREAM)即TCP连接,面向数据报的Socket(SOCK_DGRAM)即UDP连接。
protocol:指定协议,常用的协议IPPROTO_TCP(TCP传输)IPPROTO_UDP(UDP传输)。该protocol与type需要对应,即不能socket类型为UDP而协议为TCP。一般情况下该参数填为0自动使用socket类型的协议。

阅读全文

负载均衡之加权轮询调度算法

前言

WRR(Weighted Round Robin)基于权重轮询调度算法。
过去只是在nginx上直接使用,由于最近在自行开发一个webserver,涉及到一个负载均衡功能,因此自行实现基于权重轮询调度算法。

分析

假设有三台服务器(IP 端口 权重)分别为如下:

  • 服务器A:10.1.1.92:8081 weight:5
  • 服务器B:10.1.1.93:8081 weight: 1
  • 服务器C:10.1.1.94:8081 weight: 1

阅读全文

linux进程通信eventfd

前言

在muduo网络应用框架中EventLoop类中学习到关于eventfd,所以系统性查找资料学习有关eventfd。

知识点

eventfd通过一个进程间共享的64位计数器来实现进程间的通信,基于事件驱动实现的轻量级进程间通信的系统调用。

int eventfd(unsigned int initval, int flags);
# 返回一个新的文件描述符,该描述符可以用于引用eventfd对象。

阅读全文