在ubuntu上
redis安装 : sudo apt-get install redis-server
hiredis安装 : 先到 https://github.com/redis/hiredis 下载 hiredis , 然后
sudo make
sudo make install
sudo ldconfig
在ubuntu上
redis安装 : sudo apt-get install redis-server
hiredis安装 : 先到 https://github.com/redis/hiredis 下载 hiredis , 然后
sudo make
sudo make install
sudo ldconfig
. . .
epoll API是Linux系统专有的,在2.6版中新增。
epoll API的核心数据结构称作epoll实例,它和一个打开的文件描述符相关联。这个文件
描述符不是用来做I/O操作的,相反,它是内核数据结构的句柄,这些内核数据结构实现了两
个目的。
ready list中的成员是interest list的子集。
对于由epoll检查的每一个文件描述符,我们可以指定一个位掩码来表示我们感兴趣的事
件。这些位掩码同poll()所使用的位掩码有着紧密的关联。
. . .
注: 都很重要, 就不加粗了
注: 都很重要, 就不加粗了
意思:别泄露秘密。
比喻用法:指不小心提前说出本该保密的事情。
由来:
意思:我们到时候看情况再决定。
比喻用法:不提前计划,临场应对。
由来:
意思:让我们重新开始 / 改过自新。
比喻用法:做出积极改变,开始新生活或改正错误。
由来:
意思:我们直接进入重点吧。
比喻用法:不要废话,直接讲最重要的部分。
由来:
意思:你搞错对象了 / 找错地方了。
比喻用法:在错误的方向上努力或责怪了错的人。
由来:
意思:你在逗我 / 开我玩笑吧。
比喻用法:用于质疑对方说的话太离谱,可能是在开玩笑。
由来:
意思:我高兴极了 / 我欣喜若狂。
比喻用法:描述极度开心或满足的情绪。
由来:
意思:这真是锦上添花。
比喻用法:事情本已很好,又额外加上一点更好的结果。
由来:
随着互联网的不断发展,各种类型的应用层出不穷,所以导致在这个云计算的时代,
对技术提出了更多的需求,主要体现在下面这四个方面:
庞大运营成本的考量:IT经理们希望在硬件成本、软件成本和人力成本能够有大幅度地降低;
目前世界上主流的存储系统大部分还是采用了关系型数据库,其主要有一下优点:
虽然关系型数据库已经在业界的数据存储方面占据不可动摇的地位,但是由于其天生的几个限制,
使其很难满足上面这几个需求:
业界为了解决上面提到的几个需求,推出了多款新类型的数据库,并且由于它们在设计上和传统的NoSQL数据库相比有很大的不同,
所以被统称为“NoSQL”系列数据库。
总的来说,在设计上,它们非常关注对数据高并发地读写和对海量数据的存储等,与关系型数据库相比,它们在架构和数据模型方量面做了“减法”,
而在扩展和并发等方面做了“加法”。
现在主流的NoSQL数据库有MongoDB和Redis以及BigTable、Hbase、Cassandra、SimpleDB、CouchDB、等。
接下来,将关注NoSQL数据库到底存在哪些优缺点。
在优势方面,主要体现在下面这三点:
但瑕不掩瑜,NoSQL数据库还存在着很多的不足,常见主要有下面这几个:
上面NoSQL产品的优缺点都是些比较共通的,在实际情况下,每个产品都会根据自己所遵从的数据模型和CAP理念而有所不同.
通常我们使用gcc来生成可执行程序,命令为:gcc hello.c,默认生成可执行文件a.out
其实编译(包括链接)的命令:gcc hello.c 可分解为如下4个大的步骤:
1. 预处理(Preproceessing)
预处理的过程主要处理包括以下过程:
通常使用以下命令来进行预处理:
gcc -E hello.c -o hello.i
参数-E表示只进行预处理 或者也可以使用以下指令完成预处理过程
cpp hello.c > hello.i / cpp – The C Preprocessor /
直接cat hello.i 你就可以看到预处理后的代码
2. 编译(Compilation)
编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生成相应的汇编代码。
$gcc –S hello.i –o hello.s
或者
$ /usr/lib/gcc/i486-linux-gnu/4.4/cc1 hello.c
注:现在版本的GCC把预处理和编译两个步骤合成一个步骤,用cc1工具来完成。gcc其实是后台程序的一些包装,根据不同参数去调用其他的实际处理程序,比如:预编译编译程序cc1、汇编器as、连接器ld
可以看到编译后的汇编代码(hello.s)如下:
.file "hello.c" |
3. 汇编(Assembly)
汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可。
$ gcc –c hello.c –o hello.o
或者
$ as hello.s –o hello.co
由于hello.o的内容为机器码,不能以普通文本形式的查看(vi 打开看到的是乱码)。
4. 链接(Linking)
通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件。
ld -static crt1.o crti.o crtbeginT.o hello.o -start-group -lgcc -lgcc_eh -lc-end-group crtend.o crtn.o (省略了文件的路径名)。
helloworld的大体编译和链接过程就是这样了,那么编译器和链接器到底做了什么呢?
编译过程可分为6步:
链接的主要内容是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。
链接的主要过程包括:地址和空间分配(Address and Storage Allocation),符号决议(Symbol Resolution),重定位(Relocation)等。
静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大。
动态链接则是指链接阶段仅仅只加入一些描述信息,而程序执行时再从系统中把相应动态库加载到内存中去。
静态链接的大致过程如下图所示: