-
muduo_net 01 (EcpServer EchoServer)
本文源码基于muduo v2.0.2分析TCP网络编程最本质的事是处理三个半事件 连接建立:服务端accept(被动)接受连接,客户端connect(主动)发起连接 连接断开:主动断开(close,shutdown),被动断开(read返回0) 消息到达:文件描述符可读 消息发送完毕:算半个。对于低流量服务,可不必关心这个事件;这里的发送完毕指数据写入OS发送缓冲区,不代表对方已经接收到数据EchoServer类图…
-
muduo_base 05 (MutexLock)
本文源码基于muduo v2.0.2分析…
-
muduo_base 04 (Thread)
pid,pthread_id,tid __thread pthread_atfork() Reference本文源码基于muduo v2.0.2分析pid,pthread_id,tidgetpid()获取的是进程id,类型pid_t,每个进程在os中有唯一的IDpthread_self()获取的是线程ID,线程ID在某进程中是唯一的,在不同的进程中创建的线程可能出现ID值相同的情况。类型为pthread_t。Linux中的POSIX线程又被称为LWP(轻量级进程),不管创建线程还...…
-
muduo_base 03 (Exception)
UML backtrace打印堆栈 backtrace和backtrace_symbols __cxa_demangle Reference本文源码基于muduo v2.0.2分析UML继承自std::exception。如何使用该类可以看Exception_test.cc文件。函数重点关注如何打印堆栈信息backtrace打印堆栈Exception::Exception(string msg) : message_(std::move(m...…
-
muduo_base 02 (Atomic)
原子操作 GCC4.1+中的原子操作 C++11中的原子操作 类图 参考阅读本文源码基于muduo v2.0.2分析原子操作GCC4.1+中的原子操作muduo用了下面几个(需要加编译选项-march=cpu-type)://原子自增:返回旧值,原值加valuetype __sync_fetch_and_add(type *ptr, type value)//原子比较和交换操作:if the current value of *ptr is ...…
-
muduo_base 01 (Timestamp)
类图 通读源码之前的几点说明 copyable & nocopyable equality_comparable & less_than_comparable 静态断言static_assert 多平台PRid64占位 通读源码 unittest代码本文源码基于muduo v2.0.2分析类图通读源码之前的几点说明class Timestamp : public muduo::copyable, ...…
-
select/poll/epoll
select API socket何时可读写 poll API poll使用案例 代码几点说明 代码存在的缺陷 epoll API epoll LT例子 select poll epoll 比较selectAPI/*@作用:在一定时间内,监听用户感兴趣的文件描述符上的可读可写和异常事...…
-
socket编程(二)
流协议与粘包 产生原因: 粘包处理方案–本质上是要在应用层维护消息与消息的边界 read、write与recv、send getsockname、getpeername gethostname、gethostbyname、gethostbyaddr 僵进程与SIGCHLD信号 wait waitpid wait与waitpid区别 流协议与粘包争议:粘包并非专业术语,该数据包应指应用层的包。...…
-
socket编程(一)
IPv4套接字地址结构 字节序转换函数 地址转换函数 套接字类型 socket、bind、listen、accept、connect SO_REUSEADDR p2p聊天demoIPv4套接字地址结构#include <netinet/in.h>/* sockaddr_in */struct in_addr { in_addr_t s_addr; /* 23 bits IPv4 address */}; ...…
-
深入理解Java虚拟机ch3:垃圾收集器与内存分配策略
深入理解Java虚拟机ch3:垃圾收集器与内存分配策略 引用计数法 可达性分析 引用分类 回收条件 垃圾收集算法 标记-清除算法 Mark-Sweep 复制算法 Copying 标记-整理算法 Mark-Compact 分代收集 深入理解Java虚拟机ch3:垃圾收集器与内存分配策略主要思考以下3点 ...…
-
【The Linux programming interface】File I/O
本篇总结自«The Linux programming interface a Linux and UNIX system programming handbook by Michael Kerrisk» ch4,ch5 四个基本IO系统调用 简介 open read write close 四个基本IO系统调用简介#include<unistd.h>STDIN_FILENO 0STDOUT_FIL...…
-
fold expressions
C++17 Fold Expressions 用折叠表达式简化以前的代码 如何使用折叠表达式 一元折叠 二元折叠 lambda表达式使用fold expressions C++17 Fold Expressions本文介绍C++17新特性折叠表达式。文章示例代码通过MinGW编译,宏__cplusplus=201703下面我们从一个模板函数sum开始,...…
-
设计模式(一)设计原则
前言我认为可以将设计由低到高分为以下3个层次: 设计原语 设计模式 架构模式层次1更多关注具体语言上的技巧,本系列文章讨论的是层次2.作为开头第一篇,希望读者不要抱着”套用”的想法学习设计模式。GOF这本书列举了常用的23种设计模式,去背诵下来,在开发时考虑特征符合哪种设计模式,然后去套用,并不是学习设计模式的目的,设计模式需要关注的是设计而非模式。GOF这本书的重点就在前几章,通过一个编辑器的例子去告诉你思考的方向。我个人观点,设计模式的重点就在本文提到的几大原则的理解。这几大原则...…
-
gcc5.4.0 shared_ptr源码阅读--引用计数
引言本文探究在gcc5.4.0中,shared_ptr引用计数的实现相关源码:来源:Ubuntu 16路径:/usr/include/c++/5.4.0/bits文件:shared_ptr_atomic.h shared_ptr_base.h shared_ptr.hshared_ptr类下面是我精简的shared_ptr类代码,完整的在文末template <typename _Tp> class shared_ptr : public __shared_ptr<...…
-
Java中时间处理
Date SimpleDateFormat Calendar LocalDateTime ZonedDateTime DateTimeFormatter Instant 新旧API转换旧 API:位于 java.util 包中,里面主要有 Date、Calendar、TimeZone 类新 API:位于 java.time 包中,里面主要有 LocalDateTime、ZonedDateTime、ZoneId 类Datepublic static void main( S...…
-
Redis源码阅读一:简单动态字符串SDS
C字符串缺点 SDS结构体 3.0版本的SDS 5.0版本的SDS 相关操作函数 创建 释放 拼接 源码阅读基于Redis5.0.9C字符串缺点redis 127.0.0.1:6379> SET dbname redisOKredis 127.0.0.1:6379> GET dbname"redis"从上面的例子可以看到,key为dbname的值是一个字符串“redis”Redis源...…
-
Ubuntu16.06常见服务搭建
摘要 ssh 安装 samba 安装 配置 samba的用户权限 windows登陆samba vimrc摘要系统环境Ubuntu 16.04 amd64隔一段时间要配一次服务记不住,记录在这里方便以后安装。目前更新了以下服务: ssh samba vimrc // 20200126更新ssh安装sudo apt-get install openssh-server附个SecureCR...…