04 2018 档案
摘要:多线程服务器 编程模型 多线程的价值在于发挥多核处理器的性能,单核使用状态机是最高效的。 提高平均响应时间 TCP网络编程 本质 处理三个半事件 1. 连接的建立 2. 链接的断开 3. 消息到达 4. 消息发送完毕,对于低流量的服务不必关心 one loop per thread 好处: 1. 线
阅读全文
摘要:高效并发编程 并发编程的基本模型包括,通过消息机制来管理运行顺序的message passing, 通过互斥保护共享的shared memory。 线程同步的基本原则 1. 最低限度共享变量,考虑使用immutable对象 2. 尽量减小锁粒度 3. 互斥器和条件变量足以完成绝大多数任务,尽量使用高
阅读全文
摘要:线程安全的对象生命期管理 解决对象构造的线程安全 当我们需要动态分配对象时( 懒加载 ), 如果在多个线程中运行这一部分代码,可能出现多次初始化的问题。 单例模式 c++ 11 之后static 变量的初始化是线程安全的。可以利用静态变量来实现单例模式,解决重复初始化的问题。 std::call_o
阅读全文
摘要:Nagle 算法 由于TCP中包头的大小是固定的,所以在数据(Payload)大小很小的时候IP报文的有效传输率是很低的,Nagle算法就是将多个即将发送的小段的用户数据,缓存并合并成一个大段数据时,一次性一并发送出去。特别的是,只要当发送者还没有收到前一次发送TCP报文段的的ACK(即连接中还存在
阅读全文
摘要:实现TTCP (检测TCP吞吐量) 应用层协议 为了解决TCP粘包问题以及 "客户端阻塞问题" 设计的应用层协议如下: 为什么要设计应用层ACK? 因为我们测量的是应用层的流量,只有这样才能保证测出的流量是有应用层收到的而不是传输层收到的,具体一点说,TCP 的 ACK 表示对方的协议栈已经收到了你
阅读全文
摘要:我们只关心代码中的业务逻辑和底层阻塞原因 客户端代码 发送数据 接受服务端回显的数据 服务端代码 采用thread per connection 模型,每个链接分配一个线程来进行数据回显 cpp InetAddress listenAddr(3007); Acceptor acceptor(list
阅读全文
摘要:注意在成员列表中初始化的顺序并不是列表顺序 而是: 在类中声明的顺序! 这里决定的。。。 在成员初始化列表中有前后顺序依赖的时候一定要注意!
阅读全文
摘要:c++ 高性能日志库(muduo_AsyncLogging) 实现一个高效的网络日志库要解决那些问题? 首先明确一下问题的模型,这是一个典型的多生产者 单消费者问题,对于前端的日志库使用者来说,应该做到非阻塞添加,作为后端的文件写入,应该注意磁盘IO的瓶颈。 功能需求 1. 日志的级别分级 2. 发
阅读全文
摘要:``` cpp static const int _stl_num_primes = 28; template> class hashtable; ministl::vector prime_list = { 53, 97, 193, 389, 769, 1543, 3079, 6151, 12289, 24593, 49157, 98317, 196613, 393241, ...
阅读全文
摘要:tuple Class template std::tuple is a fixed size collection of heterogeneous values. It is a generalization of std::pair. 可以用来在bind中存储函数指针和参数 实现思路 不定参数
阅读全文
摘要:any class any; (since C++17) The class any describes a type safe container for single values of any type. (1) An object of class any stores an instanc
阅读全文
摘要:``` cpp class string { public: typedef size_t size_type; typedef char iterator; typedef char value_type; private: char start, end_of_storage, End; std
阅读全文
摘要:c++ 实现 key value缓存数据结构 概述 最近在阅读Memcached的源代码,今天借鉴部分设计思想简单的实现了一个keyvalue缓存。 哈希表部分使用了unordered_map,用于实现LRU算法的双向链表嵌套在缓存类中实现。 LRU 算法 LRU算法又称为last least us
阅读全文

浙公网安备 33010602011771号