摘要: 典型的Linux进程同一时刻只能做一个事情,为了能够同时处理多个事情,引入了线程概念。线程的特点是: 1、 进程的所有线程共享进程的存储空间,线程间可以直接相互访问,这与进程具有独立的运行空间有显著区别。 2、 单进程可以理解为只有一个线程在运行。 3、 多线程的主要困难是线程同步问题,而没有进程的多进程通信困扰。 线程标识 进程使用pid_t数据类型标识,线程使用pthread_t数据... 阅读全文
posted @ 2014-03-12 13:17 ericghw 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 在Linux下开发c程序时,经常引用各类库,通常通过包含多个#include来完成库的引用,对背后的一些机制没有完全理解。本文重点说明c程序开发中的库文件引用、动态链接库和静态链接库中的一些常见疑问。不特别指明时,编译器指定GCC。在学习c语言预处理过程时,我们了解到#include 和#include “xxx.h”的差别,前者在指定目录中寻找头文件,后者则在源文件所在目录中寻找头文件,如果没有找到,再到指定目录中继续寻找。通常我们在引用头文件时最好区别使用””和,这样可以加速预处理效率。在Linux系统中,指定目录通常是/usr/include目录,因此我们在源程序中使用#include 阅读全文
posted @ 2014-03-07 22:25 ericghw 阅读(3122) 评论(0) 推荐(0) 编辑
摘要: 由Linux内核提供的基本时间服务是计算自国际标准时间公元1970年1月1日00:00:00以来经过的秒数,以time_t类型表示,被称为“日历时间”,time_t通常定义为一个int型或long型的量。日历时间有几个典型的特性:以国际标准时间而非本地时间计时。可自动进行转换,例如变换到夏时制。用一个time_t量保存时间和日期。程序中获取日历时间使用time()函数,函数原型是:#include time_t time(time_t *calptr); 时间总是作为函数返回值返回,如果calptr不为空,也存储在calptr指向的内存单元中。 time_t只记录到秒级别,对于更高进度时间要. 阅读全文
posted @ 2014-03-05 22:23 ericghw 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 12306首秀被骂的狗血喷头后铁道部找来IBM、阿里巴巴等大企业要解决方案,给出的条件是资金管够但是问题得解决。几大企业最后都拒绝了。12306开始自己尝试解决问题。他们发现市面上可以买到的成套解决方案都不足以应付春运购票负载,所以只能自己改进已有的数据库(注:其实是改用VMware SQLFire/GemFire,这里我之前理解错误)。以前12306用的是小型机,发现性能严重不足,遂改用x86系统+linux平台(原平台为HP Superdome小型机,UNIX系统,Sybase ASE数据库)。最后他们的核心系统用了十几个节点(现在应该是17节点)的多路Xeon E7(具体几路待考),每个 阅读全文
posted @ 2014-01-09 20:37 ericghw 阅读(326) 评论(0) 推荐(0) 编辑
摘要: OSI参考模型最下两层是数据链路层和物理层,这两层是纯粹的物理层,也是我们研究协议栈接触比较少的内容,本文主要介绍这两层的一些基础知识。链路层和物理层在OSI参考模型中位置如下图:一、以太网MACMAC是Media Access Control的缩写,即媒体访问控制子层,对应OSI和TCP/IP模型的链路层,主要用于连接和控制物理层。而MAC层又包括MAC(Medium Access Control ,介质访问控制层)和LLC(Logical Link Control,逻辑链路控制)两部分。MAC(媒体访问控制子层)的主要功能是:上层协议层发送数据时,MAC层检查是否可以发送数据(通过PHY芯 阅读全文
posted @ 2014-01-07 22:22 ericghw 阅读(391) 评论(0) 推荐(0) 编辑