- 博客(29)
- 收藏
- 关注
原创 使用cJSON解析JSON字符串
一、为何选择cJSON 我们在使用JSON格式时,如果只是处理简单的协议,可以依据JSON格式,通过对字符串 的操作来进行解析与创建。然而随着协议逐渐复杂起来,经常会遇到一些未考虑周全的地方,需要进一 步的完善解析方法,此时,使用比较完善的JSON解析库的需求就提出来了。 基于方便引用的考虑,我们希望这个JSON解析库是用C语言实现的。同时,为了避免太 过
2017-12-07 20:47:47
1029
3
原创 使用cJSON创建JSON字符串
在Linux下,使用C语言编程,开始JSON字符串的创建。我们还是一步步来,逐渐由简单到复制。 1,下载源码可以从如下网站来下载:https://sourceforge.net/projects/cjson/ 。2,包含cJSON的源码下载下来,解压后,从里面找到两个文件(cJSON.c、cJSON.h),复制到我们的工程里面。只需在函数 中包含头文件(#include “cJS
2017-12-07 20:45:17
2231
转载 数据库性能优化详解
1.数据库访问优化法则要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?而大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制文件时硬盘可能会是瓶颈点,为什么这些一般的工作我们能快速确认瓶颈点呢,因为我们对这些慢速设备的性能数据有一些基本的认识,如网络带宽是2Mbps,硬盘是每分钟7200转等等。因此,为了快速找到
2017-11-20 19:32:44
3837
1
转载 Mysql数据库引擎-------> MYISAM和INNODB详解
一、数据库引擎 数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。二、数据库引擎任务 在数据库引擎文档中,各主题
2017-11-20 19:25:41
802
原创 线程池代码
#ifndef __THREADPOOL_H_#define __THREADPOOL_H_typedef struct threadpool_t threadpool_t;/** * @function threadpool_create * @descCreates a threadpool_t object. * @param thr_num thread num * @
2017-11-18 15:36:47
1073
转载 Nginx源码剖析之内存池、内存管理
作者:July、dreamice、阿波、yixiao。本文出处:http://blog.youkuaiyun.com/v_JULY_v/。引言 Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄
2017-11-15 20:53:01
183
转载 分布式架构的演进
作者:李小翀链接:https://www.zhihu.com/question/22764869/answer/31277656来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。系统架构演化历程-初始阶段架构初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序、数据库、文件等所
2017-11-15 20:45:23
216
原创 linux下压缩和解压缩命令-----tar命令详解
tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirNamegz命令 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .tar.gz 和 .tgz 解压:tar z
2017-11-15 10:31:59
282
原创 浅谈几种服务器端模型——epoll
引言:上一篇说到线程池方式来处理服务器端的并发,并给出了一个线程池的方案(半同步,半异步方式)。再来说下同步异步,阻塞非阻塞区别:同步和异步针对应用程序来,关注的是程序中间的协作关系;阻塞与非阻塞更关注的是单个进程的执行状态。同步有阻塞和非阻塞之分,异步没有,它一定是非阻塞的。阻塞、非阻塞、多路IO复用,都是同步IO,异步必定是非阻塞的,所以不存在异步阻塞和异步非阻塞的说法。真正的异步
2017-11-10 16:54:54
568
原创 浅谈几种服务器端模型——多线程并发式(线程池)
引言:上篇文章说到多进程并发式的服务端模型,正如上章所述,进程的频繁创建会导致服务器不堪负载,本章主要讲:线程模型和线程池的方式来提高服务端的负载能力。同时比较一下不同的模型的好处与坏处。这里不过多的强调怎样利用线程等来创建执行体以及其他的系统调用怎样使用的。服务端的线程使用方式一般分为三种:(1)
2017-11-09 21:52:10
3885
1
原创 浅谈几种服务器端模型——多进程并发式
引言:上篇文章讲到同步阻塞迭代式的进程方式,此篇文章讲述一下关于处理单进程阻塞于系统调用的情况。使用方式是多进程的方式,可以减少很大一部分的因为进程阻塞所带来的服务器无法响应问题。 基本思想是这样,如上篇文章所述,单进程阻塞在read() 系统调用的时候,会导致服务器无法响应其他客服端的连接请求,那么我们可以通过在服务器fork() 出很多子进程来处理业务,而主进程负责 accep
2017-11-09 21:35:22
647
原创 浅谈几种服务器端模型——同步阻塞迭代
引言:似乎现在阻碍服务端大部分情况下都属于IO瓶颈,硬盘的转速等,而计算的瓶颈大部分云端计算采用分布式计算,如基于GFS的MapReduce模型,网格计算或者其他的一些分布式处理。所以,现在服务端的服务衡量指标基本集中在并发量,QPS,响应速度,稳定性等。其中一部分也不乏大量的计算,属于CPU密集型的,根据业务的不同应该做相应的调整。下面浅谈一下几种常用的IO模型。 理解IO 模型
2017-11-09 21:30:29
505
转载 B-树和B+树的应用:数据搜索和数据库索引
B-树1 .B-树定义B-树是一种平衡的多路查找树,它在文件系统中很有用。定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树;⑵若根结点不是叶子结点,则至少有两棵子树;⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树;⑷所有的非终端结点中包含以下信息数据: (n,A0,K1
2017-11-07 20:22:05
330
转载 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)
数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树) BST树的搜索,从根结点开始,如果查询的关键
2017-11-07 19:41:10
201
原创 深入探究C++中虚函数和虚析构函数的实现原理
一、什么是虚函数?对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。那么虚函数表又是什么?顾名思义,虚函数表是一张表,在C++中,类的虚函数表是一块连续的内存,每个内存单元中记录一个JMP指令的地址。(注:JMP是汇编语言中的无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址
2017-10-28 21:50:00
805
转载 linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
PATH和LD_LIBRARY_PATH本质都是变量,所谓变量的意思就是由别人赋值产生的,直觉往往会让我们添加和减少这个变量本身的某些路径,实际上这是不正确的。正确的做法是我们要去修改赋予这个变量数值的那些配置文件,加一条路径或者减一条。说到底变量只关乎显示,不关乎其用于显示的内容。PATH: 可执行程序的查找路径查看当前环境变量:echo $PATH 设置:
2017-10-26 11:02:37
249
转载 Linux安装JSON-C
0、JSON简介JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。 跟XML相比,JS
2017-10-26 09:51:15
1726
转载 C++ 构造函数和析构函数是否可以继承?
先看一个例子:[cpp] view plain copyprint?#include class A { public: A() { ::std::cout "constructor: A" // 构造函数不能为 virtual A(int aa): a(aa) { ::std::cout "constructor
2017-10-23 14:27:07
2467
转载 linux之sort用法
linux之sort用法sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式: sort [-bcfMnrtk][源文件][-o 输出文件] 补充说明:sort可针对文本文件的内容,以行为单位来排序。参 数: -b 忽略每行前面开始出的空格字符。 -c 检查文件是否已经按照顺序排序。 -f 排序时,忽略大小写字母。
2017-10-20 15:51:28
319
原创 滑动窗口 (TCP流量控制)
问题:如果发送端发送的速度较快,接收端接收到数据后处理的速度较慢,而接收缓冲区的大小是固定的,就会丢失数据。TCP协议通过“滑动窗口(Sliding Window)”机制解决这一问题。看下图的通讯过程:1. 发送端发起连接,声明最大段尺寸是1460,初始序号是0,窗口大小是4K,表示“我的接收缓冲区还有4K字节空闲,你发的数据不要超过4
2017-10-18 21:44:19
756
原创 多路I/O转接服务器
多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。主要使用的方法有三种select1.select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开的文件描述符个数并不能改变select监听文件个数2.解决1024以下客户端时使用selec
2017-10-18 21:37:39
456
1
原创 高并发服务器
多进程并发服务器使用多进程并发服务器时要考虑以下几点:1. 父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)2. 系统内创建进程个数(与内存大小相关)3. 进程创建过多是否降低整体服务性能(进程调度)server/* server.c */#include #include#include#
2017-10-18 21:32:24
372
原创 awk(七)
sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义,比如/etc/passwd文件的每一行有若干个字段,字段之间以:分隔,就可以重新定义awk的列分隔符为:并以列为单位处理这个文件。awk实际上是一门很复杂的脚本语言,还有像C语言一样的分支和循环结构,但是基本
2017-10-18 21:29:48
267
原创 sed(六)
sed意为流编辑器(StreamEditor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出。sed和vi都源于早期UNIX的ed工具,所以很多sed命令和vi的末行命令是相同的。sed命令行的基本格式为sed option 'script'file1 file2 ...sed option
2017-10-18 21:27:51
249
原创 grep和find(五)
grep1. 作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep
2017-10-18 21:25:47
230
原创 正则表达式(四)
以前我们用grep在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义。其实grep还可以找出符合某个模式(Pattern)的一类字符串。例如找出所有符合xxxxx@xxxx.xxx模式的字符串(也就是email地址),要求x字符可以是字母、数字、下划线、小数点或减号,email地址的每一部分可以有一个或多个x字符,例如abc.d@ef.com、1_2@987-6.54,当然符合这个模
2017-10-18 21:12:23
389
原创 Shell脚本语法(三)
条件测试命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与C语言的逻辑表示正好相反)。例如测试两个数的大小关系:itcast@ubuntu:~$ var=2itcast@ubuntu:~$ test$var -gt 1itcast@ubuntu:~$ echo $?
2017-10-18 21:08:50
393
原创 shell基本语法(二)
变量按照惯例,Shell变量通常由字母加下划线开头,由任意长度的字母、数字、下划线组成。有两种类型的Shell变量:1. 环境变量环境变量可以从父进程传给子进程,因此Shell进程的环境变量可以从当前Shell进程传给fork出来的子进程。用printenv命令可以显示当前Shell进程的环境变量。2. 本地变量只存在于当前Shell进程,用set命令可以显
2017-10-18 21:06:25
267
原创 shell编程学习(一)
shell历史Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是
2017-10-18 21:04:03
269
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人