关闭

[置顶] 服务器端开发的一些建议

摘要: 本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结。第一部分专业基础,用于指导招聘和实习考核, 第二部分游戏入门,讲述游戏服务器端开发的基本要点,第三部分服务端架构,介绍架构设计中的一些基本原则。希望能帮到大家 一 专业基础 1.1 网络 1.1.1 理解TCP/IP协议网络传输模型滑动窗口技术建立连接的三次握手与断开连接的四次握手连接建立与断开过程中的各种状态TCP/IP协...
阅读(7870) 评论(1)

[置顶] c++侵入式对象计数设计技术

侵入式对象计数的设计原理相对非侵入式的来说: 具有以下优点: 1、一个资源对象无论被多少个侵入式智能指针包含,从始至终只有一个引用计数变量,不需要在每一个使用智能指针对象的地方都new一个计数对象,这样子效率比较高,使用内存也比较少,也比较安全;2、因为引用计数存储在对象本身,所以在函数调用的时候可以直接传递资源对象地址,而不用担心引用计数值丢失(非侵入式智能指针对象的拷贝,必须带着智能指针模...
阅读(3200) 评论(0)

[置顶] 支持vector,map,list<map>序列化,反序列化实现

协议序列化...
阅读(4215) 评论(3)

[置顶] C语言实现分布式自增有序的唯一ID生成算法-snowflake算法

前41bits是以微秒为单位的timestamp。 接着10bits是事先配置好的机器ID。 最后12bits是累加计数器。 macheine id(10bits)标明最多只能有1024台机器同时产生ID,sequence number(12bits)也标明1台机器1ms中最多产生4096个ID, * 注意点,因为使用到位移运算,所以需要64位操作系统,不然生成的ID会有可能不正确...
阅读(5565) 评论(0)

[置顶] 原子操作的一段代码学到的知识

本实例是我在学习原子操作看到一段很有趣的程序,包含的知识很多。 首先上程序: // test_atomic.cpp : 定义控制台应用程序的入口点。 // #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #...
阅读(2198) 评论(1)

[置顶] 我的c++服务器记录----非阻塞下的socket读取操作

服务器端的基本的一个操作就是从socket的fd上进行数据读取,也就是我们经常用到的read函数。 欢迎关注我的服务器代码:http://code.taobao.org/p/fastServer/src/今天主要是关注的正确的进行read操作 首相,我的socket是已经设置了非阻塞属性。read函数在非阻塞读取fd的时候会遇到不同的errno。 如何正确的处理这些erron 状态呢?1、er...
阅读(1800) 评论(0)

[置顶] 无锁队列--基于linuxkfifo实现

一直想写个无锁的队列,来提高项目后台的效率。 偶然看到linux内核的kfifo.h 实现原理。于是自己仿照了这个实现,目前linux应该是可以对外提供接口了。 #ifndef _NO_LOCK_QUEUE_H_ #define _NO_LOCK_QUEUE_H_ #include #include #include #include #include #include ...
阅读(1999) 评论(1)

[置顶] 游戏公会工作总结

想写这篇文章已经脱了很久了。本文主要写一写我在游戏公会组所做事情和成长吧。 在这里,首先要感谢我的前老大,技术组leader,郭文瑞,具有十几年的技术经历。技术广度和深度都是公司首屈一指的。还有他对技术的敏感程度是非常值得敬佩的。项目成立之时,感谢他对我的信任和帮助,才让我能够基本独立的完成游戏公会后台的设计,架构,开发等工作。目前,郭文瑞已经离职,在一家深圳公司做CTO。 以下我们公司的YY后台的一个整体架构以及公会组内部的一些基本关系。 我们项目属于YY频道内的一个服务,YY频道内的所...
阅读(2326) 评论(0)

[置顶] fastdfs学习之 选主流程

概述: (1)每个tracker服务在启动时会调用tracker_relationship_init函数启动一个线程relationship_thread_entrance。该线程会每隔几秒进行各个tracker的关系确认,若leader发生了变动,或宕机之类,会重新选出leader。 (2) 调用流程 main函数 |-int tracker_relationship_init()  ...
阅读(1191) 评论(0)

[置顶] redis源码解析----epoll的使用

平时做项目,涉及到网络层的都是epoll,前几年发现redis的epoll实现起来非常的精简,好用。因为提供的接口简单,爱并实现的很高效。于是,我就提取出来,直接使用。 今天又打开该文件详细的看看他的实现细节。 首先简单介绍epoll,它是linux内核下的一个高效的处理大批量的文件操作符的一个实现。不仅限于socket fd。 他在超时时间内会唤醒有事件的操作符。其中有两种模式 1、水平触...
阅读(2288) 评论(1)

[置顶] 删除双向链表的一个指定节点

双向链表的简单操作,供初学者学习...
阅读(3503) 评论(0)

[置顶] memcached源码阅读----使用libevent和多线程模型

本篇文章主要是我今天阅读memcached源码关于进程启动,在网络这块做了哪些事情。 一、iblievent的使用     首先我们知道,memcached是使用了iblievet作为网络框架的,而iblievet又是单线程模型的基于linux下epoll事件的异步模型。因此,其基本的思想就是 对可读,可写,超时,出错等事件进行绑定函数,等有其事件发生,对其绑定函数回调。...
阅读(7639) 评论(2)

[置顶] redis源码解读之内存管理————zmalloc文件

本文章主要记录本人在看redis源码的一些理解和想法。因为功力有限,肯定会出现问题,所以,希望高手给出指正。 第一篇就是内存相关的介绍。因为我喜欢先看一些组件的东西,再看整体的流程。先上一下代码吧 头文件 //主要提供内存分配和释放的基础功能 void *zmalloc(size_t size);//主要提供内存分配和释放的基础功能 void *zcalloc(size_t s...
阅读(4340) 评论(2)

[置顶] 工作的几个技术小点总结

这篇文章,主要是总结一下我最近工作中遇到的一些之前没有接触过的东西 1.mysql数据引擎 mysql 支持几种引擎,我们常见到的引擎ISAM 和INNODB, 其他详细介绍可以参看其他文章,很多介绍比如 http://www.cnblogs.com/xulb597/archive/2012/05/25/2518118.html 这里我想说的就是,ISAM 不...
阅读(2285) 评论(3)

[置顶] 游戏架构之前端接入层

在前边几篇文章已经给大家讲过,我们游戏通过进程间异步通信的方式来实现瓶颈的最大程度的减小。 前端接入层主要的做什么呢? 主要是数据包的有效性验证和维持与玩家的长连接。 如何做有效性的验证,我们使用过和前端具体的协议定制。然后通过我们具体的协议包头+包体的来计算。 如果我们的计算和我们协议不一致,直接就断开和客户端的连接,发送rst信号,客户端会被通知到,进程会hub状态, ...
阅读(3125) 评论(2)

[置顶] mmog游戏开发之业务篇

这周不是很忙,因为我们的游戏开发了近一年,由于公司的业务调整,在游戏开第二服的时候,老板果断的把项目停到了。 感觉超级的不爽啊。因为这个游戏项目像我的孩子一样和我一样成长,里边的大概的业务逻辑都是偶实现的,比如 基础系统里的,任务系统,背包系统,公会系统,相关副本系统,商城系统,人物属性相关,运镖,怪物AI,技能相关,地图等等,差不多游戏里的所有业务我都有所涉及 那么对于一个业务是如...
阅读(2271) 评论(0)

[置顶] 游戏登陆流程

今天主要讲游戏的登陆流程, 由于我们的后台架构是前端接入层+后端业务进程的架构模式,因此,任何网络连接请求的数据,都要经过前端接入。 首先要说明,目前大多数游戏都是 账号+角色的模式。ok 登陆两种模式1,已在该服创建过账号,创建过角色的玩家 2.在该服没有创建过,账号数据库是没有数据 我们首先说一下我们的进程模式 连接层+业务层+认证层 比如,当一个玩家要玩我们的游...
阅读(2216) 评论(1)

[置顶] 游戏后台之内存管理篇

服务端程序对于内存的管理上是重中之中,如何管理好程序的内存是保证程序稳定的最重要因素。 因此,我们是如何做的呢。 1.我们知道,当有一个新玩家进入游戏,我们需要分配一段内存给这个玩家,当这个玩家下线了,不玩了,我们就要对这段内存 进行清理。因此,如何有效的管理这段内存,如何能重新利用这段内存,是我们的问题,因此,使用内存池的方式,是比较理想的 一种方式。 通过内存池,我们...
阅读(2303) 评论(1)

[置顶] 游戏系统开发设计分享

我所搭建的总体架构非常简单就是 前端接入进程 +后端业务逻辑处理进程+数据库缓存进程+其他协作进程 一、组件基本介绍 1.通信组件 所有进程使用的是单线程,没有使用其他线程。进程间通信使用我们的一个自主开发的通信组件。 2.数据协议组件 我们也是自主开发的一个以xml表现形式,通过工具生成.h头文件,二进制bin文件。数据加载文件等。也可以和数据库进行交互的数据文件,也可以进行网络传输等,...
阅读(2536) 评论(3)

[置顶] 游戏地图掩码相关(msk)

在游戏的世界里,玩家在地图上的某点,是否能够走动,是否遇到障碍,是否是走到了阴影处,是否水层等等先关信息都要我们前后端知道。 那么服务器是如何进行实现的呢。下面主要给大家讲讲。      首先,我们知道图片是以像素为主要为单位进行计量,但是我们后端又不能使用这个东西,在二维的世界观里,我们是以坐标(x,y)具体的表现出其某个东西,所在的位置。因此,我们就要通过这个像素来表达出地点。...
阅读(2598) 评论(1)

[置顶] 游戏后台开发九问--linux平台

在游戏中会遇到很多问题,下面大体总结: 这九个选择分别是: 第一,选择什么样的架构。 第二,选择单线程还是多线程。 第三,如何在游戏中使用脚本。 第四,如何处理网络通讯。 第五,如何处理游戏通信协议。 第六,如何设计存储结构。 第七,如何设计网络同步。 第八,如何定义性能基准。 第九,如何在不同项目间进行代码复用。 先介绍一下在...
阅读(3911) 评论(3)

[置顶] 如何提高游戏后台数据查找效率

在游戏后台中,内存的数据查找是一个很重要,也是关系到我们游戏的后台效率的问题。 在大量的数据中,我们如何让我们的的程序能够快速的查找到我们所想要的数据呢。那么我们就要使用相应的算法了。 首先,我们所有使用的内存都是通过分配内存的方式,基本上都是共享内存。通过shmid来分配内存。 那么游戏中有哪些数据呢。 1.配置表数据,这个数据是程序启动的时候,就要加载到内存中,我们就使用了二分...
阅读(2976) 评论(6)

[置顶] 我们游戏后台架构学习

今天我们的游戏开始第一次的游客模式导入测试,出现了不少问题。这些问题主要还是基础的网络的连接这一块。但是网络连接这一块我还不是非常熟悉。有时间好好研究一下 下面是使用游戏的主要架构图和主要几个关键点 1 服务器采用“cluster”、“world”、“zone”三层架构,系统可灵活平行扩展   2 采用单线程,便于开发和运营;   3 采用异步消息机制,提高服务器处理性能;...
阅读(11020) 评论(8)

[置顶] Linux 服务器后台系统架构的高性能设计

因为,目前在做游戏的的后台开发。尽管最近在忙于开发游戏业务逻辑的的相关代码,也在不停思考着游戏后台的一些架构问题。 因为游戏后台处理着大部分的业务逻辑,因此。在性能上是必须的。 那么如何尽最大的提高性能呢,下面根据我们后台架构提出的几点,因为我们后台架构业务逻辑是单进程将单线程处理 首先,我们知道目前后台所效率上受到限制的就是 数据库IO>磁盘》网络IO>cpu>内存...
阅读(8684) 评论(1)

[置顶] c语言实现的通用二分查找算法

// /* 二分查找是基于排好序的算法。复杂度低,并且很高效, 由于项目中大量使用的了二分查找,但是又不能每个业务实现一个 因此有必要实现一个通用的二分查找 其主要思想:通过对已经排好序的数组,进行数据指针的比较。 @const void *key 需要查找的key值 @const void *base, 所要查找数据的首地址 @int nmemb,所要查找的成员数量 @int...
阅读(4112) 评论(1)

[置顶] 角色扮演类大型网络游戏C++后台和纯C语言后台的差异

因为一些原因,我从一个用c++做后台程序的工作室转到了用纯C语言作为游戏后台的工作室,   而这两套后台程序都可以号称目前中国在角色扮演类游戏中成熟的后台架构。。c++的架构我已经基本已经很清晰了,因为看了两个月代码。   而这套纯C语言的是某网络游戏公司几个比较有名的后台,中国几大国产游戏都在用。   然后切实感受到了面向对象和结构语言之间的差异。。。。     面向对象更注重...
阅读(9280) 评论(19)

[置顶] 信号量,互斥锁和条件变量之间的差异

首先信号量,互斥锁和条件变量 具体如何使用大家可以去学习UNP2进程间通信。里边以消费者生产者模型为例子,讲的很好,推荐大家学习。 信号量,互斥锁和条件变量 在linux编程中,常用于线程间的同步。   在计算机中,一些资源在同一时间只允许一个线程进行修改。   那么这三者根据自身的特点,适用于什么场合,他们三者之间有什么差异呢?   下面简单的用代码来描述一下 如何使用 a)互斥...
阅读(3174) 评论(0)

[置顶] ]linux内核学习之网络篇——接收分组

计算机处于网络中,是不知道什么时候会发过来数据,是不可预测的。因此,目前所有的现代设备驱动程序都是使用了中断来通知内核的有 链路层的以太网帧到达。 驱动程序有特定的相应的程序,因此当有数据帧到达的时候,内核就会调用该程序。将数据从网卡上传输到物理内存中。或者通知内核延迟处理。 下面一个图就是数据穿过内核的路径完整的路径   (1)net_interrupt是设备驱动程序设置的终端处理...
阅读(2493) 评论(0)

[置顶] linux内核学习之网络篇——网络物理层的设备初步

网卡是是网络中最基本的硬件之一。 在内核中,每个网络设备都一个一个net_device 结构体实例,在进行初始化完成之后,会将该结构注册到内核中。然能内核知道该结构的存在。 这会创建一个sysfs项,这,关联到该设备的对应目录中。该目录为 [root@localhost ~]# ls -l /sys/class/net 总计 0 drwxr-xr-x 3 root root 0 10-08...
阅读(1496) 评论(0)

[置顶] linux内核学习之网络篇——IP和TCP结构体源码

今天只是看一下IP协议的结构体和TCP的结构体所控制的字段。 首先看一下IP的字段,就是传说中ip协议中的包头字段。   struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:4, version:4; #elif defined (__BIG_ENDIAN_BITFIELD) __u8 version:4,...
阅读(3598) 评论(0)

[置顶] linux内核学习之网络篇——套接字缓冲区

在内核分析网络分组时,底层协议的数据将传输到跟高的层。而发送数据的时候顺序是相反的。每一层都是通过加(首部+净荷)传向跟底层,直至最终发送。 这些操作决定了网络的的性能。 就如下图所示   linux因此设计了一个结构体   如下代码 /** * struct sk_buff - socket buffer * @next: Next buffer in list * @...
阅读(2654) 评论(0)

[置顶] linux内核学习之网络篇——通过socket通信

通过网卡,让我们能达到通信,对unix是相当的复杂,组要是socket每一层都是用了不同的通信协议,需要好多设置好多的选项。因此在/dev目录下,并没有网卡对应的文件。   socket不仅可以用于各种传输协议的IP的连接。也可以用于内核支持的所有其他地址和协议类型。 套接字是使用socket库函数生成的。然后bind函数等。 socket主要用于协议的选择,通信类型,地址族。 bind...
阅读(3450) 评论(1)

[置顶] linux内核学习之网络篇——TCP/IP概述

1.ISO 参考模型 因特网协议栈中的层 人们已经进行了一些讨论关于如何将TCP/IP参考模型映射到到OSI模型。由于TCP/IP和OSI模型组不能精确地匹配,还没有一个完全正确的答案。 另外,OSI模型下层还不具备能够真正占据真正层的位置的能力;在传输层和网络层之间还需要另外一个层(网络互连层)。特定网络类型专用的一些协议应该运行在网络层上,但是却运行在基本的硬件帧交换上。类似协议的例子有...
阅读(1809) 评论(2)

[置顶] Linux 下C语言简单实现线程池

C语言简单实现线程池 0 前言 网上关于线程池的例子还是不少,简单明了的倒是比较少,看了网上的资料,打算借鉴网上的一些例子,自己实现以下。 线程的概念就不多说,首先说一下多线程的好处:多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 那么为什么又需要线程池呢? 我们知道应用程序创建一个对象,然后销毁对象是很耗费资源的...
阅读(12064) 评论(10)

[置顶] 分享一下工作以来我看过计算机书籍

由于自工作依赖一直专注于linux 下的c/c++编程工作,所以,我的书籍也大的都是这方 这边书尽管很经典,但是我的能力实在有限,只把数据结构的那点看了一下,其他的 看的很吃力,所以放下了,没怎么,希望将来我能力上来了,再看吧。 这是一本好书。让你知道c++到底给你做了那些事情,编译器为你生成了那些代码,是什么影响了C++的效率。c++的一些实现机制,表达的很好,还有一些例子,争取...
阅读(14122) 评论(82)

[置顶] Ngnix 源码学习(3)----内存池结构

本篇首先把 内存池结构 大概的说一下,具体使用将在下一节细致描述   首先知道内存池的作用     为什么需要内存池? a. 在大量的小块内存的申请和释放的时候,能更快地进行内存分配(对比malloc和free) b.减少内存碎片,防止内存泄露。   内存池的原理     内存池的原理非常简单,用申请一块较大的内存来代替N多的小内存块,当有需要malloc一块 比较小的内存是,...
阅读(2467) 评论(0)

[置顶] ngnix 源代码学习(1)

一直想学习一个优秀的服务器源代码,之前一直纠结在学apache还是ngnix,后来比较一下,还是学习ngnix比较好,因为我目前致力于linux下的服务端软件开发。 尤其是想学一下web服务器的开发。   第一,代码量比较少,貌似就十万行,但是apach几十万行,会很累看的。 第二,技术都比较好,代码风格好。 第三,技术文档少,刺激自己努力学习 第四,目前很优秀的web服务器。...
阅读(2258) 评论(1)

[置顶] 多线程实现消费者生产者的例子

今天看书,看了一个例子,于是自己手动的自己敲了一下。。。 但是,期望的结果和理论结果是不一样的,求解答啊。。。 上源代ma #include "apue.h" #include /* basic system data types */ #include /* timeval{} for select() */ #include...
阅读(1996) 评论(2)

[置顶] dynamic_cast, reinterpret_cast, static_cast and const_cast 学习

dynamic_cast, reinterpret_cast, static_cast and const_cast 在C语言中,经常会遇到类型转换的一些东西。类型转换分为:显示类型转换和隐式类型转换。 隐式类型转换: 所谓隐式类型转换就是语言本身,使用编译器,自动就给我们转成了我们需要的类型 比如如下代码: short a=2000; int b; b=a; 但是要主要一点,...
阅读(1322) 评论(0)

[置顶] POSIX---linux多线程编程基础入门。

过年不回家了,一直在工作的地方呆着,就腾出了很多时间来学习了。前几天腾讯给打电话,问了linux下的一些知识,但是答得很不好。自我分析了一下,总结如下: 1.知识学习一遍是远远不够的。还是要多学习,多揣摩,多思考。 2.知识是要经常回头复习的。 3.程序的工作是要多自己写代码实践,多思考。写出自己的东西。 好,开始学习linux了。 《线程》,对于一个程序员,如果不懂得线程,那么我觉得他...
阅读(4030) 评论(2)

[置顶] 带有头结点的简单链表实现

#ifndef LinkedList_H #define LinkedList_H #include "dsexceptions.h" #include // For NULL // List class // // CONSTRUCTION: with no initializer...
阅读(1302) 评论(0)

[置顶] 简单链表实现

今天元旦,不想工作。只想写一写自己想学习的东西。。今天就写了个链表的单向链表。 //头文件chain.h #ifndef _chain_ #define _chain_ #include #include using namespace std; template class Chain; template class ChainNode { friend Chain; priva...
阅读(1204) 评论(0)

[置顶] ISO8583接口的详细资料

这两天一直在搞系统代缴费这一块,要用到ISO8583这个协议。感觉很复杂,整理一下资料给大家共享一下。。       ISO8583包(简称8583包)是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。8583包前面一段为位图,用来确定包的字段域组成情况。 其中位图是8583包的灵魂,它是打包解包确定字段域的关键, 而了解每个字段域的属性则是填写数...
阅读(2475) 评论(2)

[置顶] strcat 和strncat 函数学习

函数原型 char * strcat ( char * destination, const char * source ); Concatenate strings连接字符串 Appends a copy of the source string to the destination string. The terminating null character in destinatio...
阅读(2877) 评论(0)

[置顶] 深入浅出---unix多进程编程之wait()和waitpid()函数

Wait和waipid函数   当一个进程正常或异常终止的时候,内核就像其父进程发送SIGCHLD信号,因为子进程是个一步事件,所以这种信号也是内核系那个父进程发的异步通知。父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用执行的函数。对于这种信号的系统默认动作是忽略它。 现在要知道调用wait或waitpid的进程可能会发生什么情况:    如果其所有子进程都在运行,则阻塞...
阅读(26596) 评论(15)

[置顶] 深入浅出--UNIX多进程编程之fork()函数

0前言 上周都在看都在学习unix环境高级编程的第八章——进程控制。也就是这一章中,让我理解了unix中一些进程的原理。下面我就主要按照进程中最重要的三个函数来进行讲解。让大家通过阅读这一篇文章彻底明白进程这点事。希望对大家有所帮助。 1进程环境          在学习进程之前,一定要了解一下unix的进程环境。系统如何对进程终止,和一个程序启动终止,程序运行的原理等,这些都有...
阅读(15774) 评论(14)

[置顶] 作为程序员,我们更应该《挖一口属于自己的井 》

今天看到一篇很有道理的一篇文章,分享给大家。不论在什么行业,尤其是在我们这个吃年轻饭的的IT行业,尤其是敲代码的程序员。我们就应该要记住下面的这个道理。   两个和尚住在隔壁,所谓隔壁就是隔壁那座山,他们分别住在相邻的两座山上的庙里。两座山之间有一条溪,这两个和尚每天都会在同一时间下山去溪边挑水,久而久之,他们便成为了好朋友。   就这样,时间在每天挑水中不知不觉已经过了5年。突然有一天,左...
阅读(4241) 评论(12)

[置顶] unix环境高级编程-5.4-缓冲

提到缓冲这个概念,大家都知道非常熟悉不过了,我们在写程序的时候,比如java,C++都会涉及到一些缓冲的概念,那么到底缓冲有什么好的作用的。   其实缓冲在unix的操作系统里,就是为了减少read和write的调用次数。在第三章中,对不同缓冲区的长度设置,执行IO所要的cpu时间量是不一样的。他也对每个io流自动的进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。不幸的是,标准I/...
阅读(1807) 评论(0)

[置顶] unix环境高级编程-文件长度与截断

4.12 文件长度 stat 的结构成员st_size表示以字节为单位的文件长度。此字段只对普通文件、目录文件和符号链接有意义。 对于普通文件,其文件的长度可以是0,在读此文件的时候,将得到文件结束指示。 对于目录,文件长度通常是一个数的倍数, 对于符号链接,文件长度是文件明中的世界字节数。   现今,大多数UNIX系统提供的字段st_blksize和st_blocks。其中第一个是对...
阅读(2835) 评论(0)

[置顶] unix环境高级编程-4.11-chown,fchown和lchown函数

接下来讲的函数主要是用来更改文件的用户ID和,组ID。 #include int chown(const char* pathname,uid_t owner,gid_t group); int fchown(int filedes,uid_t owner,gid_t growp); int lchown(const char* pathname,uid_t owner,gid_t gr...
阅读(2850) 评论(0)

[置顶] TechWeb微晚报52期:马云不差钱 收购雅虎成迷

编者按:在微博时代,每个人的生活都深深的被知识浪潮所影响,而互联网则是永不过时的课堂。TechWeb团队将每天挑选出精彩微博,以飨读者。 —————————————————正文分割线———————————————   【一】马云会否收购雅虎? 李开复:任何想收购雅虎的公司,现在都最好不要公开表态。表态想收购雅虎 --> 雅虎股价上涨 --> 股价+溢价提高收购成本 --> 价位太高出资...
阅读(1519) 评论(0)

[置顶] C++ STL学习之list

LIST 是一个双向链表。 因为本人的C++的编程时间有限,目前还没怎么用到list,在数据结构中,list是一个比较重要的。 首先复习一下什么是双向链表。双向链表是一种每个节点都有两个指针,分别直接的指向了直接前驱和直接后驱。这种方式对访问一个节点的前后都是十分方便快捷的。向前向后搜索的时间都是为常量时间。 并且在链表的头和尾部插入元素的时间都是常量时间。 List有以下优点:...
阅读(5088) 评论(0)

[置顶] unix环境高级编程-4.9-chmod,fchmod函数和粘住位

这两个函数可以更改我们现有文件的访问权限。 #include int chmod(const char *pathname,mode_t mode); int fchmod(int filedes,mode_t mode); 以上函数返回0是表示成功,-1,表示不成功。 查看GNU C手册: int chmod (const char *filename, mode t mod...
阅读(2251) 评论(0)

[置顶] unix环境高级编程-4.8-umask函数

自此我们已经说明了每个文件相关联的9个访问权限位。在此基础上,我们可以说明与每个进程相关联的文件模式创新屏蔽字。 umask函数为进程设置文件模式创建屏蔽字,并返回以前的值。 #include mode_t umask(mode_t cmask); 查看GNU C手册。 mode_t umask (mode t mask) [Function] The umask function...
阅读(3813) 评论(0)

[置顶] C/C++中几种经典的垃圾回收算法

1.引用计数算法          引用计数(Reference Counting)算法是每个对象计算指向它的指针的数量,当有一个指针指向自己时计数值加1;当删除一个指向自己的指针时,计数值减1,如果计数值减为0,说明已经不存在指向该对象的指针了,所以它可以被安全的销毁了。可以很直观的用下面的图表示:           引用计数算法的优点在于内存管理的开销分布于整个应用程序运行期间,非常...
阅读(18601) 评论(32)

[置顶] unix环境高级编程-4.7-access函数

如前所述,当用open函数打开一个文件的时候,内核以进程的有效用户ID和有效组ID,为基础执行期访问权限测试。有时候,进程也希望按期实际用户ID,和实际组ID,来测试访问能力。 access函数是按照实际用户ID和实际组ID,进行访问权限测试的。   #include int access (const char*pathname,int mode);   返回值:成功返回0,出错返...
阅读(2938) 评论(0)

[置顶] unix环境高级编程-系统是如何设置文件权限的

4.4 设置用户ID和设置组ID 与一个进程相关联的ID有6个或更多,如下表所示:    与每个进程相关联的用户ID和组ID 实际用户ID 实际组ID 我们实际上是谁,这两个字段在登录时取自口令文件中的登录项,通常在登录会话期间这些值不会改变,但root进程可改变他们。 有效用户ID 有效组ID 附加组ID 规定...
阅读(1652) 评论(0)

[置顶] unix环境高级编程-4.3-文件类型

我们都知道在unix系统中,文件分为两种--------普通文件和目录。unix大多数都是这些文件类型。但是也有另外一种。 下面简单介绍一下文件类型: (1)普通文件。最常见的文件类型。 (2)目录文件。这种文件包含了其他文件的名字以及指向与这些文件有关的信息指针。对一个目...
阅读(2340) 评论(0)

[置顶] unix 环境高级编程-1.6-程序和进程

1.6、程序和进程   程序:存放在磁盘上,处于某个目录中的可执行文件。使用6个exec函数中的一个由内核将程序读入存储器,并使之执行。进程和进程id:程序的执行被称为进程(process)。unix确保每个进程都有一个唯一的数字标识符。称为进程ID。进程id总是非负数。...
阅读(985) 评论(0)

[置顶] C/C++之动态内存分配比较

1、C malloc 和 free vs C++ new 和delete: C 语言的malloc() 和free() 并不会调用析构函数和构造函数。C++的 new 和 delete 操作符 是 "类意识" ,并且当调用new的时候会调用类的构造函数和当delete 调用的时...
阅读(3740) 评论(9)

[置顶] 在C + + 0 x新标准中,使用构造函数初始化列表和序列

介绍 C+ + 03初始化是前后矛盾。例如,它不让你初始化POD数组 是类成员和圆荚体阵列使用新分配。c++的限制规则变得更明显03初始化时,你需要初始化一个容器对象填充。通常,你要强迫自己用的是一种笨重的回路作为一个解决办法: std::vector vi; for (in...
阅读(3459) 评论(2)

[置顶] vector 内部方法大全 学习(初学者的参考资料)

STL容器之vector学习。   平时写程序的时候,用到的vector容器是非常多了。今天系统整理一下vector 内部的一些方法。   Vector 是一种顺序性的容器,按照严格线性存储各种对象。他其实就是一种动态的数组,正如数组,、vector有他们存储在存储单元相...
阅读(4489) 评论(7)

[置顶] 悼念乔布斯---他的产品改变了世界,思想影响了一代人,三个故事,勉励大家

乔布斯座右铭"Stay hungry, stay foolish"的意境:“我们必须了解自己的渺小。如果我们不学习,科技发展的速度会让我们五年后被清空。所以,我们必须用初学者谦虚的自觉,饥饿者渴望的求知态度,来拥抱未来的知识。”     乔布斯逝世,苹果官方网页悼词:苹果失...
阅读(2404) 评论(7)

[置顶] Effective c++学习笔记条款20:宁以 pass-by-reference-to-const替换pass-by-value

Prefer pass-by-reference-to-const to pass-by-value         这个问题在在C++是非常常见的。传值和传引用巨大的差别在于你所使用的参数是其本身还是其副本。缺省情况下C++是以by value 传递的。其副本是对象本身的...
阅读(2654) 评论(9)

[置顶] Effective C++ 条款13学习笔记:以对象管理资源

Use objects to manage resources         懈怠了几天,今天应该继续努力学习Effective C++ ,让自己每天充实起来。         资源对于我们计算机视为一个非常重要的概念。尤其我们第一时间想到的内存资源,当让资源还包括文件描述...
阅读(1339) 评论(3)

[置顶] Effective c++学习笔记——条款10:令operator=返回一个*this的引用

Have assignment operators return a reference to *this 从题目,我们就要记住这条信息,让你的operator=函数return *this; 基本类型int、char等都提供了连锁赋值,并采用右结合律。 int x, y,...
阅读(2201) 评论(4)

[置顶] Effective c++学习笔记——条款09:绝不在构造和析构过程中调用virtual函数

Never call virtual functions during construction or destruction     这是本条款的核心,不该在构造函数和析构函数期间调用virtual函数,因为存在不可预期的结果。为什么会这么说呢?首先看一下下面的例子:...
阅读(1504) 评论(5)

[置顶] Effective c++学习笔记——条款08:别让异常逃离析构函数

Prevent exceptions from leaving destructors             本条款主要讲述当我们写代码的时候,如果出现了异常,让我们如何对异常处理,如何更加安全的处理异常。让我们的代码看起来更加完美。       1、问题来源...
阅读(2952) 评论(1)

[置顶] Effective c++学习笔记——条款07:为多态基类声明virtual析构函数

Declare destructors virtual in polymorphic base classes        1、为什么要申明虚函数        C++程序设计中通常会存在一个基类有多个派生类型,而基类中的存在的大都是纯虚函数,需要派生类型实现。而这样的情况...
阅读(6028) 评论(26)

[置顶] unix发展历史及你必须要会的Shell 命令

1. Unix 历史 =============   我们学习一样知识, 都应该先了解它的历史.   因为从历史当中, 我们能明白为什么现状是这样,   并且, 了解历史后, 在学习过程中会有许多顿悟, 然后很快的掌握它.   unix 历史表:   a. 1970...
阅读(3060) 评论(4)

[置顶] Effective c++ 学习笔记——条款04:确定对象被使用前已先被初始化

Make sure that objects are initialized before they're used.      昨天就已经把第四条款看完了,初始化这篇内容非常非常丰富,讲解了很多,也让我的一些疑惑解开了。由于经常加班,写作时间比较少,我今天看写完这篇文章,还要...
阅读(4237) 评论(42)

[置顶] Effective C++学习笔记——条款03:尽可能使用const

今天开始学习条款三,详细解读一下,让自己有更大的收获。   const 多才多艺,可以用在classes外部修饰global和namespace 作用域中的常量。或修饰文件、函数、或区块作用域中被声明的为static的对象。还可以修饰classes内部的static和non-s...
阅读(2655) 评论(9)

[置顶] C++常用函数(续)

又写了一些函数,希望大家给指点一下。。。。小弟不胜感激。。。因为我是在利用ACE 在Linux下编写程序,看到ACE_DEBUG(( _ERROR ACE_TEXT( " delAllBlank execaption\n" ) )); 等是为了调试程序的方便写...
阅读(2344) 评论(4)

[置顶] 发几个c++常用小工具的函数(续)

笔记一直再做项目,随时都会用到一些函数和方法,现在属于一种原始积累状态,将来用到的时候就随便拿来用。省时又省力。。后续还会很多这样的方法。大家也可以去找找。 //取当前日期 string getCurDate() { time_t nowtime; time(&nowtime...
阅读(3989) 评论(35)

[置顶] C++实现日期类函数

今天做了一个项目,其中涉及到了日期的处理,通过一些查找,和自己的修改,写了一个工具类,给大家共享一下,有需要的可以直接用啦,每个方法我都基本 上写了注释,希望大家能好好的理解,共同进步吧。          下边就把代码贴出来了。 /***头文件。 只进行了一些定义 Dat...
阅读(5921) 评论(4)

[置顶] Effective c++ 学习笔记之条款一视C++为一个语言联邦

今天开始学习Effective c++,保持一周两个条目的学习。 1.让自己习惯C++        前天慕名买了这本传说中很神的书,有评论说学c++的分两种人,一种人是看过Effective c++,另一种人是没看过Effective c++。本来我是从java转向C++的...
阅读(1546) 评论(2)

[置顶] 50个c/c++源代码网站

C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码 。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建 议,以进一步加强这方面的清单。...
阅读(1781) 评论(2)

[置顶] c++学习笔记之函数的调用和返回

准备花三天时间来好好谢谢c++函数的调用和返回。当然这里参照网络的,还有一些书,来进行笔记。本章节分为 1、声明参数和返回类型        函数是由返回类型,函数名,和函数名后边括号内的形式参数列表组成的。例如 :     voidf(int a);//函数的声明, 不会...
阅读(1106) 评论(0)

[置顶] 讲述几点对程序进行效率优化的方法

1.前言         前几天看了深入理解计算机系统的 程序优化。因为前边两章节涉及到了太多的汇编,而本人不是计算机科班出身,计算机基础薄弱,看那些汇编代码的确很吃力, 打算以后对汇编慢慢来学习吧。毕竟学习不是一日之功。         看到程序优化这章节,感触颇深啊,平...
阅读(2123) 评论(1)

RabbitMQ消息队列(一): Detailed Introduction 详细介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[-] 历史应用场景  系统架构进一步的细节阐明 1 使用ack确认Message的正确传递2 Reject a message3  Creating a queue4 Exchanges  5 Virtual hosts 1. 历史     RabbitMQ是一个由erlan...
阅读(3027) 评论(1)

gdb Debugging Full Example (Tutorial): ncurses

I'm a little frustrated with finding "gdb examples" online that show the commands but not their output. gdb is the GNU Debugger, the standard debugger on Linux. I was reminded of the lack of example o...
阅读(4316) 评论(0)

漫谈C++11多线程内存模型v

目录(?)[+] 写在前面         “C++11 feels like a new language” - Bjarne Stroustrup         的确,C++11核心已经发生了巨大的变化,它现在支持Lambda表达式、对象类型自动推断、统一初始化语法、Deleted和Defaulted函数、nullptr、委托构造函数、右值引用等等,本文主要讨论C+...
阅读(4229) 评论(0)

关于游戏架构设计的一些整理吧

一个大型的网落游戏服务器应该包含几个模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须),其中业务逻辑可能根据具体需要,又划分为好几个子模块。 这里说的模块可以指一个进程,或者一个线程方式存在,本质上就是一些类的封装。   对于服务器的并发性,要么采用单进程多线程,要么采用多进程单线程的方式,说说两种方式的优缺点:   一、单进程多线程的服务器设计模式,只有一个进...
阅读(5706) 评论(0)

socket中的函数遇见EINTR的处理

这几天,写服务器代码过程当中,遇见EINRT信号的问题,我是借鉴 《unp 》,采用continue或者goto again循环解决的。但是感觉这个还是很有必要记录一下。网络上查找到的信息很多。下面是我查找到的和EINTR有关的介绍: 1  http://blog.csdn.net/yanook/article/details/7226019  慢系统调用函数如何处理中断信号EINTR 2  ...
阅读(4736) 评论(0)

Linux 系统性能分析工具图解读

最近看了 Brendan Gregg 大神著名的 Linux Performance Observability Tools,这么好的资料不好好学习一下实在是浪费了,又找到了大神的ppt 和 演讲(需爬墙),于是把相关的命令和概念连预习,学习,复习走了一遍。 首先学习的是大神提出的 Basic Tool 有如下几个: uptime top (htop) ...
阅读(5134) 评论(0)

GCC 提供的原子操作

gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。 其声明如下: type __sync_fetch_and_add (type *ptr, type value, ...) type __sync_fetch_and_sub (type *ptr, type value, ...) type __sync_fetch_and...
阅读(3469) 评论(1)

CPU负载的分析

最近对我的本本(4核8线程)用top命令看系统状况出现了CPU利用率超过200%的情况,非常诧异,查了下相关资料,把这个问题弄清楚了。 首先来分析下CPU Load load average: 0.09, 0.05, 0.01 分别是1分钟、5分钟、15分钟的平均Load。 Load这个东西怎么理解呢,就像一条马路,有N个车道,如果N个进程进入车道,那么正好一人一个,再多一...
阅读(5874) 评论(0)

Ubuntu 源码安装最新版本 gcc 5.x版本

首先下载最新版 http://www.netgull.com/gcc/releases/gcc-5.3.0/ Pre-Knowledge The regular procedure to build any program from source code is simply the below three steps: ① ./configure ② ...
阅读(5993) 评论(0)

动态库的链接和链接选项-L,-rpath-link,-rpath

链接动态库 如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置。linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照/etc/ld.so.conf里面的配置搜索绝对路径。同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过设定它来查找除默认路径之外的其他路径,如查找/work/lib路径,你可以在...
阅读(4664) 评论(0)

开源的相关记录

Protocal Buffer是google开源的用于数据交换的库,常用于跨语言的数据访问,担任的角色一般为对象的序列化/反序列化。 另一个与之类似的开源软件是facebook开源的thrift,它们两个最大区别是thrift提供了自动生成RPC的功能而Protocal Buffer需要自己实现,但Protocal Buffer的一个优势是其序列化/反序列化非常高效。 AD:51CTO首届中...
阅读(4320) 评论(0)

一步步编写并发阻塞队列

这篇文章主要介绍了linux中编写并发队列类,功能有:并发阻塞队列、有超时限制、有大小限制 设计并发队列 复制代码代码如下: #include #include using namespace std; template class Queue  {  public:      Queue( )      {    ...
阅读(5864) 评论(0)

linux 下的编程效率分享

操作 性能 memset  1K 150W次/s memcpy  1K 150W次/s malloc 小字节 单线程 100W次/s gettimeofday 30W~400W次/s time 30W~400W次/s getpid ...
阅读(4455) 评论(1)

backgroud thread

redis终于在2.4版本里引入了除主线程之外的后台线程,这个事情由来已久.早在2010年2月就有人提出aof的缺陷,提及的问题主要有: 1 主线程aof的每次fsync(everysecond模式)在高并发下时常出现100ms的延时,这源于fsync必不可少的磁盘操作,即便已经优化多次请求的离散小io转化成一次大的连续io(sina的同学也反映过这个问题).2 主线程里background...
阅读(4557) 评论(0)
417条 共28页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:1773184次
    • 积分:17996
    • 等级:
    • 排名:第515名
    • 原创:270篇
    • 转载:133篇
    • 译文:14篇
    • 评论:728条
    最新评论