XML 语法速查笔记

2018-10-11
阅读 3 分钟
2.5k
相比起 Json,XML 是一种相对古老和复杂、但功能更加强大的数据存储/传输格式。也因为其复杂,有一些语法需要记录一下,在使用多种语言进行 XML 操作的时候备查。

在 C/C++ 异步 I/O 中使用 MariaDB 的非阻塞接口

2018-09-14
阅读 5 分钟
5.9k
对 C/C++,MySQL 提供的库传统上都是阻塞操作,因此适合多线程 / 进程服务器架构编程。但是如果用 C/C++ 编写服务器,往往对性能会有极致要求,此时采用非阻塞的异步 I/O 才是更好的框架。

Python 调用 C 动态链接库,包括结构体参数、回调函数等

2018-02-23
阅读 6 分钟
17.5k
研究了一些资料,采用 python 的 ctypes 来完成这项工作。已经验证通过,本文记录一下适配流程。验证采用 cpp 来设计,不过暂时还没有涉及类的内容。以后如果需要再补足。

基于汇编的 C/C++ 协程 - 切换上下文

2018-02-06
阅读 5 分钟
8.4k
其中调度,其实在技术实现上与其他的线程、进程调度没有什么特别的差异,同时也要看具体业务的需求。限制 C/C++ 协程应用的最大技术条件是上下文切换。理由在前文也说了。

基于汇编的 C/C++ 协程 - 背景知识

2018-01-31
阅读 4 分钟
7.6k
近几年来,协程在 C/C++ 服务器中的解决方案开始涌现。本文主要阐述以汇编实现上下文切换的协程方案,并且说明其在异步开发模式中的应用。 本文地址:[链接] 首先,我们来看一下 C/C++ 服务器开发的历史。 参考资料 协程 - 维基百科,自由的百科全书 异步IO - 维基百科,自由的百科全书 基于 epoll 设计类似 libevent 的...

Makefile 速查笔记

2017-11-21
阅读 6 分钟
8.3k
做 Linux C++,一个稳定的工程,Makefile 是很少改动的。但是如果需要修改的时候,Makefile 的语法和用法一时半会就回忆不出来(原谅我记忆力差……)。在此把自己以前的 Makefile 学习笔记记录一下吧,也作为分享。本文假设读者已经懂得了 Makefile,因此主要是作为备忘和速查用。

高性能磁盘 I/O 开发学习笔记 -- 软件手段篇

2017-11-02
阅读 4 分钟
9.4k
上一篇文章我们讲了一下硬盘(磁盘 & SSD)在硬件上的一些限制,总结了两个优化硬盘 I/O 的方向。本篇我们就从 Linux 软件开发的角度,讲一下在软件设计中我们应该如何提高硬盘 I/O。

高性能磁盘 I/O 开发学习笔记 -- 硬件原理篇

2017-10-27
阅读 5 分钟
6.5k
曾经做嵌入式开发的我,现在做服务器开发,很多思路要转变。今天学习了服务器高性能IO设计,同时自己也还发散开去学习了其他的一些参考资料,顺便结合自己已有的一些知识,做为自己的学习笔记,总结和记录一下吧~~

研究一下 fork 的原理,并且还有 vfork 的一些使用场景

2017-07-29
阅读 2 分钟
7.5k
笔者一直试图从最基本的原理上去理解(甚至尝试原理性设计)一个服务器的架构,为此提出了一些问题。此外,笔者对 异步 I/O 也有不少学习。从几个方面学习了 vfork() 的用法。

基于 epoll 设计类似 libevent 的异步 I/O 库 - 接口

2017-06-13
阅读 4 分钟
6.5k
这篇文章可以算是我在 GitHub 上一个工程的设计概要了。简要说明了该工程的设计思路以及技术要点。 本文章纯原创,没有参考资料。不过有设计过程中记录下的相关文章: 使用 pipe 在程序正文中捕获和处理信号 本文地址:[链接] 工程简介 基本原理 总所周知,在 Linux 中实现异步 I/O,适用的系统 API 就是 epoll。这里主...

使用 pipe 在程序正文中捕获和处理信号

2017-05-03
阅读 2 分钟
4.6k
我的上一篇文章研究了一下如何在程序的正文(而不是信号处理函数)中捕获和处理信号。当时用的方案是 sigprocmask()。但那个方法理论上是可能漏掉一些信号的。

使用 sigprocmask 和 sigpending 在程序正文中捕获和处理信号

2017-04-20
阅读 4 分钟
6.4k
最近在尝试使用 epoll 写一个类似 libevent 的库。那么,如何像 libevent 一样,在 event loop 里加入对信号事件的观测呢?我查了一下资料,一个可行的方法,就是使用 sigprocmask() 及其相关功能来实现啦。

正确使用 realloc()

2016-12-02
阅读 2 分钟
16.5k
众所周知,realloc() 的作用就是将已经 malloc 的内存块,重新扩展加长。当你并没有使用高端的内存池的时候,临时从堆中申请加大内存,这是很有用的。但是如何正确地使用 realloc() 呢?

优化 cJSON 库的 array 插入速度

2016-10-17
阅读 3 分钟
5.9k
和参考资料一样,我在我的项目中应用 cJSON 数组功能,发现在创建 array 的时候耗时很厉害(作为嵌入式 CPU,几十个 array 项的插入,居然花了 300ms)。搜了一下,网上已经有人遇到过了,就是参考资料的那篇。本文解释一下优化的思路和方法。

使用 libev 构建 TCP 响应服务器(echo server)的简单流程

2016-08-23
阅读 2 分钟
15.1k
请注意这是 libev 而不是 libevent 的文章!这篇文章主要是使用具体的例子,说明如何使用 libev。网上不少文章都是照抄示例,一点用都没有……本文将示例的代码精简一下,补上说明;大家都懂的部分就不赘述了。需要完整源码请查看参考资料。

Libev 官方文档学习笔记 - 03:常用 watcher 接口

2016-08-22
阅读 6 分钟
14.4k
这个 watcher 负责检测文件描述符(以下简称fd)是否可写入数据或者是读出数据。最好是将fd设置为非阻塞的。  注意有时候在调用read时是没有数据的(返回0),此时一个一个非阻塞的read会得到EAGAIN错误。

Linux errno 列表

2016-08-16
阅读 7 分钟
6.4k
网上关于 errno 的资料,要么没有错误名,要么没有错误号,要么格式编排混乱……算了,自己记一个吧 本文地址:[链接] 1~16 {代码...} 17~32 {代码...} 33~48 {代码...} 49~64 {代码...} 65~80 {代码...} 81~96 {代码...} 97~112 {代码...} 113~124 {代码...}

嵌入式 Linux 中自定义 reboot / poweroff 行为

2016-08-09
阅读 2 分钟
7.4k
一般拿到一个 Linux SDK 的时候,方案商已经内置了很实用的 busybox,用来执行 poweroff / reboot 命令。但嵌入式开发时,有时需要自定义执行 reboot / poweroff 之后的一些行为。本文就是负责简单易懂地解释如何修改。

Libev 官方文档学习笔记 - 02:watcher 基础

2016-08-08
阅读 3 分钟
11k
请注意这是 libev 而不是 libevent 的文章! 这篇文章是第二篇,主要讲 libev 里的 watcher 的一些基础操作。 本文地址:[链接] Watcher 解析 以下是一段示意性的代码,使用的是ev_io: {代码...} 每一个 watcher 类型有一个附属的 watcher 结构体。(一般是struct ev_XXX或ev_XXX)  每一个 watcher 结构都需要用ev_i...

Libev 官方文档学习笔记 - 01:概述和 ev_loop

2016-08-04
阅读 6 分钟
33.8k
自从接触到 libev 之后,就深深赞同作者精简的设计理念,于是就爱上了 libev 这样简单的I/O库。此外,libev 的大小也比 libevent 小得多并且自由得多。虽然我在公司的项目用的异步 I/O 库还是以 libevent 和 libubox 为主,但是个人业余的工程中,往往用的是 libev 而不是 libevent。

mbedTLS(PolarSSL)简单思路和函数笔记(Client端)

2016-07-18
阅读 5 分钟
40.6k
OpenSSL一直以来各种被诟病,具体挑了哪些刺,本文就不深究。作为OpenSSL有很多替代,我了解到的有cyaSSL(WolfSSL)和PolorSSL。其中PolarSSL已经被ARM收购了,改名为mbedTLS。本文列举了作为一个SSL client端,应该如何使用mbedTLS。本文可以搭配我上一篇文章OpenSSL一起看;单独看也没问题

OpenSSL 简单思路和函数笔记

2016-07-11
阅读 2 分钟
22.7k
一直以来都是普通的socket read/write,现在终于有基于SSL通道的项目了。所以简单记录了一下OpenSSL的调用流程,便于快速入门。本文地址:[链接]

fork 和 vfork 使用的注意事项和 system() 函数的替代

2016-07-07
阅读 2 分钟
8.7k
在Linux编程中,我们经常使用 Fork()。然而不少情况下,fork是有危险的。但是又不能简单使用vfork替换就成了。这个笔记说明了两者使用的一些注意点。本文地址:[链接]

./configure常用参数

2016-07-05
阅读 2 分钟
8.5k
--prefix=PREFIX把所有文件安装在PREFIX中而不是默认的路径(如 /usr/local/xxx 中)。默认是"/"或者是"/usr/local"等等。。以下还有部分参数细化 PREFIX 的其它目录

Libevent 官方文档学习笔记(3. evbuffer部分)

2016-07-04
阅读 6 分钟
9.7k
本文地址:[链接]  Evbuffers: 缓冲化的I/O实用工具  头文件:<event2/buffer.h> Evbuffer基本操作 {代码...} 创建/销毁evbuffer {代码...} 第一个函数,参数locking传入的参数是一个锁。可以传入NULL,让evbffer自动创建一个锁。 {代码...} 第一个函数,获取当前evbuffer的总数据长度。第二个函数,由于数据在e...

Libevent 官方文档学习笔记(2. bufferevent部分)

2016-05-31
阅读 8 分钟
16.2k
evutil_socket_tSocket的抽象。除了Windows之外,其他系统都是一个int类型。如果考虑Windows的兼容性的话,建议用这个类型。

Libevent 官方文档学习笔记(1. libevent_core部分)

2016-05-30
阅读 9 分钟
23.8k
初入libevent的人,很可能是第一次接触异步编程。Libevent的编程思想,建议还是多看前人的程序,或者是看libevent本身的文档学习。或者是介绍另外一个库,那就是libuv,它是libev某种意义上的的替代品(而libev又可以算是libevent的某种替代品笑)。libuv的文档我记得也有对异步编程的介绍。好了,这不是本文的内容。

Linux内核定时器简单使用

2016-05-27
阅读 2 分钟
9.9k
Timer是Linux内核的一种软中断,被调用函数是异步执行的。由于是软中断,所以函数被执行的时候是处于非进程的上下文中,所以有以下规则需要遵守:

Linux内核自旋锁使用笔记

2016-05-26
阅读 1 分钟
8.7k
首先,spinlock是一把锁,它的功能与其他锁的作用类似,都是对用于临界区进行原子读写。使用这把锁时,原理上就是不停的循环检查锁的状态,直到可用的时候进入临界区。

在C程序中按照你想要的格式输出时间:strftime()

2016-05-25
阅读 1 分钟
7.9k
以下列出全部的格式化字符,但只说明我自己用到的哈。需要用到的建议大家自行写程序测试一下。年份:%C:%g:%G:%y:不带世纪的十进制年份,即0~99%Y:带世纪的十进制年份