MENU

标签 摸爬滚打C++之路 下的文章

手撸基于C++11线程池

技术点

  • 采用queue作为一个队列,生产者消费者模式
  • std::condition_variable条件变量代替Linux Pthread库中的pthread_cond_*()函数提供条件变量相关的功能
  • C++11风格的std::function,后续可以改造成templete模板方法

阅读全文

undefined reference to `vtable for原因解决

前言

最近在开发编译C++新模块项目,犯了一个低级错误,基类中虚析构函数忘记给它添加实现体。看到这个错误联想到是虚函数中出来问题,先是在子类一直没有找到,后面细细发现问题出现在基类中。

阅读全文

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

阅读全文