MENU

[置顶] 博客回归

起源

自2014年开博客至今,算起来也有俩三年啦。以前还在读书没有时间管理,很多东西不了解,如今上到大学才能看懂一些网页的代码,现在趁着寒假对博客重新整理,以前写的文章全部删除,从现在开始重新编写文章。

阅读全文

[置顶] 基于Linux EPOLL多路复用的C++轻量级WebServer

功能

  • 可作为静态webserver(常规的html、图片、视频等)
  • 支持GET、POST(交由cgi处理)请求
  • 多站点支持
  • 支持fastcgi(目前已支持php-fpm)
  • 支持反向代理
  • 支持session、cookie

todo:

  • 负载均衡(开发中,完善支持随机模式、hash模式、权重模式三种负载均衡策略)
  • 日志完善
  • 实现类似nginx中rewrite模块

项目地址 欢迎PR、Issue、Star。

阅读全文

手撸基于C++11线程池

技术点

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

阅读全文

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:线程将执行的函数的参数。

阅读全文