Tanswer_

纸上得来终觉浅,绝知此事要躬行

Linux 系统 CPU 使用率简单分析

CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方式展示。 CPU 使用率 为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Jiffies 记录了开机一来的节拍数。每发生一次时间中断,Jiffies 的值就加 1。 Lin...

2018-12-14 21:59:45

阅读数 158

评论数 0

Redis 客户端 Hiredis 简介

学习总结一下官方发布的C版本客户端 hiredis,了解hiredis 客户端大致实现细节。在理解代码之间需要了解通信协议的特点,我上一篇转载的文章已经有过介绍,大家可以去看一下。 hiredis 提供了同步、异步访问,异步 API 需要与一些事件库协同工作,主要看一下同步API的实现。 hi...

2018-06-28 21:03:07

阅读数 2014

评论数 1

Redis 通信协议(protocol)

本文档翻译自: http://redis.io/topics/protocol 。 Redis 协议在以下三个目标之间进行折中: 易于实现 可以高效地被计算机分析(parse) 可以很容易地被人类读懂 网络层 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号...

2018-06-28 17:41:22

阅读数 558

评论数 0

Linux交换空间(swap space)

每次安装Linux的时候,都会要求配置交换分区,那么这个分区是干嘛的呢?不设置这个分区有什么后果?如果一定要设置,设置多大比较合适?本篇将试图回答这些问题并尽量覆盖所有swap相关的知识。 下面的所有例子都在ubuntu-server-x86_64 16.04下执行通过 什么是swap? ...

2018-06-23 18:18:46

阅读数 483

评论数 0

DNS协议详解及报文格式分析

DNS协议详解及报文格式分析

2018-06-11 20:54:17

阅读数 101

评论数 0

无锁队列的原理和实现

无锁队列的实现-coolshell CAS 另一篇参考 设计不使用互斥锁的并发数据结构 锁粒度

2018-03-24 13:20:09

阅读数 788

评论数 1

复合&继承关系下的构造和析构

继承关系下的构造和析构 看一下测试代码: /* * @filename: Inheritance.cpp * @author: Tanswer * @date: 2018年01月31日 14:59:28 * @description: 测试继承关系下的构造...

2018-01-31 16:25:55

阅读数 337

评论数 1

编写网络服务程序的常用编程模型

今天大概总结一下编写服务端程序常用的编程模型。参考UNP第三版第三十章和陈硕的muduo那本书,强烈建议仔细阅读。注意以下代码只是为了显式框架或者说编程模型,不是完整的程序,深夜写的比较任性,不要见怪。 accept + read/write 这个不是并发服务器,而是迭代服务器(itera...

2018-01-25 02:32:20

阅读数 581

评论数 1

Muduo网络库源码分析之TcpConnection Class

用于管理一个具体的 TCP 连接,比如消息的接收与发送,完成用户指定的连接回调 connectionCallback。 TcpConnection 构造时接收参数有 TCP 连接的 sockfd,服务端地址 localAddr,客户端地址 peerAddr,并通过 Socket 封装 sockf...

2018-01-17 15:04:45

阅读数 423

评论数 0

Muduo网络库源码分析之Acceptor和TcpServer

Acceptor 用于 accept 一个 TCP 连接,accept 接受成功后通知 TCP 连接的使用者。Acceptor 主要是供 TcpServer 使用的,其生命期由后者控制。一个 Acceptor 相当于持有服务端的一个 socket 描述符,该 socket 可以 accept 多...

2018-01-12 22:43:03

阅读数 557

评论数 0

C++智能指针的分析与使用

手动管理的弊端 在简单的程序中,我们不大可能忘记释放 new 出来的指针,但是随着程序规模的增大,我们忘了 delete 的概率也随之增大。在 C++ 中 new 出来的指针,赋值意味着引用的传递,当赋值运算符同时展现出“值拷贝”和“引用传递”两种截然不同的语义时,就很容易导致“内存泄漏”。 ...

2018-01-11 23:39:30

阅读数 1539

评论数 0

Muduo网络库源码分析之对socket及其相关操作的封装

主要涉及到的类和实现文件有: Endian.h 提供了字节序转换的函数。 Socket.h/Socket.cc socketfd 的封装,提供了绑定地址、开始listen、接受连接等操作,并可设置套接字选项。 InetAddress.h/InetAddress.cc 套接字地址的封装,...

2018-01-09 15:14:11

阅读数 574

评论数 0

eventfd 的分析与具体例子

eventfd 介绍 Linux 2.6.27后添加了一个新的特性,就是eventfd,是用来实现多进程或多线程的之间的事件通知的。 接口 #include int eventfd(unsigned int initval, int flags); 这个函数会创建一个事件对象(eve...

2018-01-08 23:22:55

阅读数 1949

评论数 0

Muduo网络库源码分析之定时器的实现

muduo 的定时器功能由三个 class 实现,TimerId、Timer 和 TimerQueue。 TimerId 类 它唯一标识一个 Timer 定时器。TimerId Class 同时保存Timer* 和 sequence_,这个 sequence_ 是每个 Timer 对象有一个...

2018-01-07 15:41:05

阅读数 763

评论数 0

Muduo网络库源码分析之Reactor模式的关键结构

本文分析一下Reactor模式的实现,关键是三个类:Channel、Poller、EventLoop。 事件分发类 Channel Channel 是 selectable IO channel,负责注册与响应IO事件,包括注册给Poller的 fd 及其监听的事件,以及事件发生了所调的回...

2018-01-06 18:36:02

阅读数 875

评论数 0

FastCGI 协议分析与C语言实现实例

考虑让我的 web server 增加对 PHP 的支持,这就要用到 php 解析器来将客户端请求的 php 文件解析为静态资源,再由我的 web server 将其返回到客户端,php-fpm 就可以来帮我们完成这个工作。可是我的 web server 如何与 php-fpm 通信呢? 接下来就...

2017-12-23 14:46:54

阅读数 707

评论数 0

内存管理之用户空间

32 位的平台上,线性地址空间为固定的 4GB,并且由于采用了保护机制,Linux内核将这 4GB 分为两部分,线性地址较高的 1GB(0xC0000000 到 0xFFFFFFFF )为共享的内核空间;而较低的 3GB 为每个进程的用户空间。由于每个进程都不能直接访问内核空间,而是通过系统调用间...

2017-12-10 14:47:55

阅读数 619

评论数 0

[编译链接装载]之静态链接

链接器之所以存在或者产生,基本上是由于程序开发的模块化。这里讲的模块,主要是编译概念上的模块,通常他们按照功能划分,比如一个.c或者.cpp文件就是一个编译单元,就是一个模块,编译后就产生一个.o目标文件。为了最终生成一个可执行文件、静态库或者动态库,就需要把各个编译单元按照特定的约定组合到一起。...

2017-12-06 15:38:25

阅读数 567

评论数 1

[编译链接装载系列]之聊聊目标文件与ELF格式

编译器编译源代码后生成的文件叫做目标文件,从结构上讲它是已经编译后的可执行文件格式,只是还没有经过链接,其中可能有些符号或有些地址还没有调整。它本身就是按照可执行文件格式存储的,跟真正的可执行文件在结构上稍有不同。目标文件的格式:现在 PC 平台流行的可执行文件格式主要是 Windows 下的 P...

2017-12-04 20:58:14

阅读数 810

评论数 0

内存寻址之分页机制

写在前面:分页机制完成线性地址到物理地址的转换 80x86 规定分页机制是可选的。分段和分页没有什么必然联系,分段可以说是 Intel 的 CPU 一直保持着的一种机制,而分页只是保护模式下的一种内存管理策略。想开启分页机制,CPU必须工作在保护模式,而工作在保护模式可以不开启分页。分页机制由控制...

2017-12-02 14:51:54

阅读数 1513

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭