摘要: 之前写过一个篇【HTTP协议详解】,这次继续介绍HTTP协议中的压缩。本文会使用Fiddler来查看HTTP request和Response, 如果不熟悉这个工具,可以先参考[Fiddler教程]HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法。 HTTP采用通用的压缩算法,比如gzip来压缩HTML,Javascript, CSS文件。 能大大减少网络传输的数据量,提高了用户显示网页的速度。当然,同时会增加一点点服务器的开销。 本文从HTTP协议的角度,来理解HTTP压缩这个概念。阅读目录HTTP内容编码和HTTP压缩的区别HTTP压缩的过程实例:用Fiddler观 阅读全文
posted @ 2014-04-02 18:46 Siylzヾ夏天 阅读(164) 评论(0) 推荐(0) 编辑
摘要: #include定义函数 int sscanf (const char *str,const char * format,........);函数说明sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。 返回0表示失败 否则,表示正确格式化数据的个数 例如:sscanf(str,"%d%d%s", &i,&i2, &s); 如果三个变成都读入成功会返回3。 如果只读入了第一个整数到i则会 阅读全文
posted @ 2014-04-02 15:33 Siylzヾ夏天 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 例如:inta[15]={0};第一种,编译器会把第一个初始化值赋给数组的第一个元素,然后用0赋给其余的元素。如果没有给出初始值,编译器不会去做初始化工作。这样简洁的方式让代码更加高效。还有一种,就是memcpy函数的使用。例如上面的数组,可以memcpy(a,0,15); 阅读全文
posted @ 2014-04-02 14:56 Siylzヾ夏天 阅读(124) 评论(0) 推荐(0) 编辑
摘要: #include #include #define BUFFER_SIZE 16 // 缓冲区数量struct prodcons{ // 缓冲区相关数据结构 int buffer[BUFFER_SIZE]; /* 实际数据存放的数组*/ pthread_mutex_t lock; /* 互斥体lock 用于对缓冲区的互斥操作 */ int readpos, writepos; /* 读写指针*/ pthread_cond_t notempty; /* 缓冲区非空的条件变量 */ pthread_cond_t notfull; /* 缓冲区未满的条件变量 */... 阅读全文
posted @ 2014-04-02 14:44 Siylzヾ夏天 阅读(164) 评论(0) 推荐(0) 编辑
摘要: Linux的线程实现是在内核以外来实现的,内核本身并不提供线程创建。但是内核为提供线程【也就是轻量级进程】提供了两个系统调用__clone()和fork (),这两个系统调用都为准备一些参数,最终都用不同的参数调用do_fork()核内API。do_fork()提供了很多参数,包括CLONE_VM(共享内存空间)、CLONE_FS(共享文件系统信息)、CLONE_FILES(共享文件描述符表)、CLONE_SIGHAND(共享信号句柄表)和CLONE_PID(共享进程ID,仅对核内进程,即0号进程有效)。当直接使用fork系统调用时,内核调用do_fork()不使用任何共享属性,进程拥有独.. 阅读全文
posted @ 2014-04-02 11:50 Siylzヾ夏天 阅读(425) 评论(0) 推荐(0) 编辑
摘要: 在前文讨论了线程创建的一些基本东西,这里讨论有哪些方法可以使线程终止,线程终止又是如何与创建所需的参数进行关联的。一,正常终止 线程在执行完成之后,正常终止。二,线程取消2.1 线程取消的定义 一般情况下,线程在其主体函数退出的时候会自动终止,但同时也可以因为接收到另一个线程发来的终止(取消)请求而强制终止。2.2 线程取消的语义 线程取消的方法是向目标线程发Cancel信号,但如何处理Cancel信号则由目标线程自己决定,或者忽略、或者立即终止、或者继续运行至Cancelation-point(取消点),由不同的Cancelation状态决定。线程接收到CANCEL信号的缺省处理(即p... 阅读全文
posted @ 2014-04-02 11:48 Siylzヾ夏天 阅读(247) 评论(0) 推荐(0) 编辑
摘要: pthread_join用来等待另一个线程的结束,函数原型如下: extern int pthread_join __P ((pthread_t __th, void **__thread_return)); 这个调用之后,如果没有出错,会引起调用线程的阻塞,直到所等待的线程结束。这个调用的第一个参数很容易理解,表示需要等待哪个线程,第二个参数是我们自己定义的一个指针变量,用来存储所等待线程结束之后的返回值。 我们主要看一下这个变量可能是从哪来的,以pthread_exit为例,这个调用用来主动结束线程。函数原型如下: extern void pthread_exit __P ((vo... 阅读全文
posted @ 2014-04-02 11:47 Siylzヾ夏天 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 该函数可以用于向指定的线程发送信号: int pthread_kill(pthread_t threadId,int signal); 如果线程内不对信号进行处理,则调用默认的处理程式,如SIGQUIT会退出终止线程,SIGKILL会杀死线程等等,可以调用signal(SIGQUIT, sig_process_routine); 来自定义信号的处理程序。 传递的pthread_kill的signal参数一般都是大于0的,这时系统默认或者自定义的都是有相应的处理程序。signal为0时,是一个被保留的信号,一般用这个保留的信号测试线程是否存在。 pthread_kill 返回值如下: 0:调用成 阅读全文
posted @ 2014-04-02 11:35 Siylzヾ夏天 阅读(532) 评论(0) 推荐(0) 编辑
摘要: 在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务;互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthread_mutex_lock,pthread_mutex_unlock这几个函数以完成锁的初始化,锁的销毁,上锁和释放锁操作。一,锁的创建 锁可以被动态或静态创建,可以用宏PTHREAD_MUTEX_INITIALIZER来静态的初始化锁,采用这种方式比较容易理解,互斥锁是pthread_mutex_t的结构体,而这个宏是一个结构常量,如下可以完成静态的初始化锁: pthread_mutex_t .. 阅读全文
posted @ 2014-04-02 11:33 Siylzヾ夏天 阅读(860) 评论(0) 推荐(0) 编辑
摘要: 读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。如下是一个XML片段:周星星20白晶晶18在TinyXML中,根据XML的各种元素来定义了一些类 阅读全文
posted @ 2014-04-02 11:23 Siylzヾ夏天 阅读(5113) 评论(0) 推荐(0) 编辑
摘要: 在我多年的 Python 编程经历以及在 Github 上的探索漫游过程中,我发掘到一些很不错的 Python 开发包,这些包大大简化了开发过程,而本文就是为了向大家推荐这些开发包。请注意我特别排除了像SQLAlchemy和Flask这样的库,因为其实在太优秀了,无需多提。下面开始:1.PyQuery(with lxml)安装方法 pip install pyqueryPython 解析 HTML 时最经常被推荐的是Beautiful Soup,而且它的确也表现很好。提供良好的 Python 风格的 API,而且很容易在网上找到相关的资料文档,但是当你需要在短时间内解析大量文档时便会碰到性能的 阅读全文
posted @ 2014-04-02 11:18 Siylzヾ夏天 阅读(177) 评论(0) 推荐(0) 编辑
摘要: #!/usr/bin/python指定用什么解释器运行脚本以及解释器所在的位置# -*- coding: utf-8 -*-用来指定文件编码为utf-8的PEP 0263 -- Defining Python Source Code Encodingshttp://www.python.org/dev/peps/pep-0263/估计有不少人注意过一些python脚本开头有这么行东东:#!/usr/bin/python它是用来干嘛的?貌似没有它对脚本功能也没啥影响。它是用来指定用什么解释器运行脚本以及解释器所在的位置。以test.py为例,脚本内容如下:def test(): print... 阅读全文
posted @ 2014-04-02 10:57 Siylzヾ夏天 阅读(5235) 评论(0) 推荐(0) 编辑