分类: 杂文

12 篇文章

CPU Cache
CPU Cache 缓存在现代计算机系统中有很大的作用。无论是CPU内的L1,L2,L3缓存,还是TLB缓存,还是内存上的对于一些应用数据的缓存。可以说缓存无处不在,CPU内的缓存可以让在运行的时候不需要多次去内存中取数据。那么为什么缓存能够为计算机系统带来这么大的好处呢? 归根到底就是,因为局部性(locality): 时间上的局部性 时间上的局…
惊群(thundering herd)
惊群(thundering herd) 本篇只是对惊群做一个实验性的学习.了解下epoll的为什么会产生惊群现象,并且可以如何处理.不过我的描述都是比较浅显的,暂时没有深入到内核中去学习. wiki-惊群 维基百科上对于惊群的解释是: In computer science, the thundering herd problem occurs w…
IO Multiplexing (二)
在前面一篇文章中,简要地介绍了在几个io多路复用的api的使用以及它们各自的优缺点.然而,对于epoll还有不少东西.如epoll的两种触发模式--边沿触发(edge trigger)和水平触发(level trigger).此外,epoll往往和非阻塞io搭配在一起使用,那么为什么epoll要和非阻塞io搭配在一起呢,是否有更好的效率呢? 本文用…
IO Multiplexing
如果对c语言中socket编程不熟悉的同学可以参考这里: 前言 多线程io模型的问题 在讲述io多路复用之前,就需要提到经典的多线程编程模型.一般来说,服务器编程中,我们会对每接收到一个请求就创建一个子线程来执行该请求.大致代码如下(并不是真实的代码): while(1) { int tid; int client_fd = accept(sock…
TinyHttpServer
本文概述一下如何来实现一个简单的HTTP服务器,没有实现其他的功能。如session,cookie,缓存,请求转发等等。主要是学习到浏览器中HTTP的基本格式,如何正确地解析HTTP报文。此外,借鉴了一些HttpServelet中的接口定义。还实用了@webServlet注解来模仿HttpServlet中URL对Servlet的映射。并且以此使用反…
Makefile tutorial
这篇文章主要内容来自这里。GNU Make是用于控制产生可执行文件以及像项目中其他非源文件的。 GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program's sour…
计算机中的浮点数
计算机中的浮点数 在计算机中对于数的表达,都是使用二进制的方式。对于浮点数也是,不同于整数的表示,浮点数的表示复杂不少。目前而言,大多数的电脑都是使用IEEE 754标准所定义的表示方法。本文的目的是,讲解IEEE 754的基本格式,并且来解释一些浮点数的问题。 定点法来表示二进制数 先不管定点法的意思是什么。先来回想一下十进制表示小数的方法,这个…
MapReuce的笔记
下面是MapReduce的图例: 一个MapReduce的Map任务数量由输入文件大小/块的大小来决定。而Reduce的个数由用户来指定。 The number of partitions (R) and the partitioning function are specified by the user. MapReduce任务的执行流程: M…
在不同的.c文件中引用外部变量
对C语言的了解非常薄弱,想知道为什么在一个.c文件当中可以使用另外一个.c文件定以的函数,为了帮助问题的阐述,接下来用简单的代码复现一下我们的问题。 a.c文件: #include<stdio.h> void hello(){ printf("hello world!") } 然后在b.c文件当中调用hello()这…
extern关键字的一点思考
在过去,我一直以为在不同的.c文件中引用全局变量需要使用extern关键词。突然发现,如下代码(不需要extern关键词)也可以直接运行(使用的是CLion,),并且不会出错。 //foo.c中 int a = 1; //bar.c中 int a; int main() { printf("%d\n",a); } 这让我感觉十分…