共计 19 篇文章

2:C1000K 实战,基于 Libev

最近公司年终旅游,博客也是有很久没有更新了,这次继续我们上一次的高并发服务器编程。 上一篇文章讲解了要在Linux系统上实现C1000K服务器所需要进行的系统调优操作,那么我们现在就开始来编写我们的程序吧~ #include <arpa/inet.h> #include <ev.h> #include <stdlib.h> #include <stdio.h> ...

SDL系列教程:第三章 游戏对象设计

每个游戏当中都会有很多的对象存在,例如玩家、敌人、非玩家角色(NPC)、陷阱、子弹等。将这些游戏对象关联起来是一项很复杂的工作,如果没有一个可靠的基础框架的话,我们的游戏会越来越笨拙,代码结构也会越来越混乱。所以我们可以完全利用面向对象编程(OOP)的力量来帮助我们实现可靠的基础框架。 我们将会在这一章介绍以下内容: 使用继承 实现多态 使用抽象基类 有效继承设计 使用继承 继承是OOP第一种强大的特性,这个特性可以帮助我们开发可复用的基础框架。通过使用继承,我们可以从现有类型当中创建新的子类。我们在这里不会花太多篇幅去讨论继承的细节,而是着重于如何将这个特性应用到我们的框架当中。 ...

EINTR-信号中断与慢系统调用

什么是慢系统调用? 慢系统调用指的是那些可能永远阻塞的系统调用,永远阻塞的系统调用意味着该调用永远无法返回,而多数网络支持函数都属于这一类系统调用。就如同**accept()**函数,如果没有客户连接,那么该调用将会一直阻塞。 读写‘慢’设备(包括pipe,终端设备,网络连接等)。读时,数据不存在,需要等待;写时,缓冲区满或其他原因,需要等待。读写磁盘文件一般不会阻塞。 当打开某些特殊文件时,需要等待某些条件,才能打开。例如: ...

用户态与内核态

该文章转载自http://my.oschina.net/liubin/blog/27795 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个 1.例子: void testfork() { if(0 == fork()) { printf("create new process success!\n& ...

缓冲区的作用

经常听到缓冲区的概念,但始终对它的作用与具体实现有很多疑问,最近拜读了《Linux程序设计》 4TH之后,总算有了大概的理解。 该书举了一个例子,对一个10M文件的复制操作三种不同的实现,速度有不同的体现。 首先包含头文件: #include <unistd.h> #include <stdlib.h> #include <stdio.h> 首先看第一个实现, ...