自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

转载 epoll原理及线程安全小结

epoll的红黑树由一个互斥量保护,ready list是自旋锁保护的。ready list涉及到add\mod\wait红黑树涉及到add\mod\del1 等待队列实现原理1.1 功能介绍  进程有多种状态,当进程做好准备后,它就处于就绪状态(TASK_RUNNING),放入运行队列,等待内核调度器来调度。当然,同一时刻可能有多个进程进入就绪状态

2016-01-28 18:51:55 2213

转载 How to correctly read data when using epoll_wait

up vote3down votefavorite3I am trying to port to Linux an existing Windows C++ code that uses IOCP. Having decided to use epoll_wait to achieve high concurrency, I am already fac

2016-01-28 15:40:35 717

转载 Linux信号与信号处理

信号(signal)是一种进程间通信机制,它给应用程序提供一种异步的软件中断,使应用程序有机会接受其他程序活终端发送的命令(即信号)。应用程序收到信号后,有三种处理方式:忽略,默认,或捕捉。进程收到一个信号后,会检查对该信号的处理机制。如果是SIG_IGN,就忽略该信号;如果是SIG_DFT,则会采用系统默认的处理动作,通常是终止进程或忽略该信号;如果给该信号指定了一个处理函数(捕捉),则会中断当

2016-01-27 11:11:21 353

转载 Linux系统中的异常堆栈跟踪简单实现

转载请说明出处:http://blog.csdn.net/cywosp/article/details/25002201          在Linux中做C/C++开发经常会遇到一些不可预知的问题导致程序崩溃,同时崩溃后也没留下任何代码运行痕迹,因此,堆栈跟踪技术就显得非要重要了。本文将简单介绍Linux中C/C++程序运行时堆栈获取,首先来看backtrace系列函数——使用范

2016-01-27 10:25:15 585

转载 Linux 下 C++ 异常处理技巧

处理固有语言局限性的四种技术Sachin O. Agrawal ( sachin_agrawal@in.ibm.com), 高级软件工程师, IBM Software Labs, India简介: 处理 C++ 中的异常会在语言级别上遇到少许隐含限制,但在某些情况下,您可以绕过它们。学习各种利用异常的方法,您就可以生产更可靠的应用程序。保留异常来源信息

2016-01-27 10:24:25 521

转载 CodeBlocks运行在Linux Gnome下启用系统终端取代xterm

codeblocks版本:10.05Linux发行版及其版本:Ubuntu 12.10Linux桌面环境:Unity/Gnome用codeblocks写了个程序,编译运行之后发现codeblocks默认的终端居然是xterm,丑死了,上网找了一下,发现这个办法能够让codeblocks调用系统终端:启动codeblocks,点击菜单栏 Settings ==>

2016-01-27 10:15:18 978

转载 Google Protocol Buffer 的使用和原理

简介什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Pro

2016-01-13 11:09:16 344

转载 Lua Module

前言从Lua5.1版本开始,就对模块和包添加了新的支持,可是使用require和module来定义和使用模块和包。require用于使用模块,module用于创建模块。简单的说,一个模块就是一个程序库,可以通过require来加载。然后便得到了一个全局变量,表示一个table。这个table就像是一个命名空间,其内容就是模块中导出的所有东西,比如函数和常量,一个符合规范的模块还应使requ

2016-01-13 10:43:59 541

原创 lua_state

按照我自己的理解 游戏里面是一个lua脚本对应一个lua_state,每次服务器运行的时候把所有脚本都加载进内存 然后再用就可以了 是这样吗这样好像比较耗内存吧?一共一个lua state你那样太耗内存,脚本之间也不可以互相require晕 那和我理解出入有点大了啊 那么现在有2个情况了: 是服务器启动的时候加载所有的脚本还是需要的时候在luaL_l

2016-01-12 15:12:20 1635

转载 HashMap解决hash冲突的方法

源码分析   HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。当程序执行 map.put(String,Obect)方法 时,系统将调用String的 hashCode() 方法得到其 hashCode 值——每个 Java 对象都有 hashCode() 方法,都可通过该方法获得它的 hashCode 值。得到这个对象的 hashCode 值之后,系统会根据该

2016-01-08 11:50:19 989

转载 centos安装mysql以及mysql++开发环境

1>安装mysql服务器:groupadd mysqluseradd -g mysql mysqlcd /usr/localgunzip ln -s  mysql-5.0.41-linux-i686  mysqlcd mysqlchown -R mysql .chgrp -R mysql .scripts/mysql_install_db --user=mysq

2016-01-06 13:04:43 476

转载 处理大并发之五 使用libevent利器bufferevent

首先来翻译一段文章         你可能注意到随着我们代码变得越来越高效,程序也变得更加复杂。当我们产生一个进程的时候,我们没有必要为每一个链接管理一个buffer,我们只需要每个处理独立栈分配缓冲区就可以了。在读和写的时候,我们不必明确的跟踪每一个socket,这在我们的代码里是一个暗示,我们没有必要定义一个结构体去跟踪每一个操作什么时候完成,我们只需要使用循环栈变量就可以了。

2016-01-06 12:27:16 313

转载 处理大并发之 对epoll的理解,epoll客户端服务端代码

处理大并发之对epoll的理解,epoll客户端服务端代码序言:该博客是一系列的博客,首先从最基础的epoll说起,然后研究libevent源码及使用方法,最后研究nginx和node.js,关于select,poll这里不做说明,只说明其相对于epoll的不足,其实select和poll我也没用过,因为我选择了epoll。说起epoll,做过大并发的估计都不陌生,之前

2016-01-06 12:25:41 406

转载 libevent库1.4升级到2.0时无法flush的解决办法(互相踢下线)

libevent的接口兼容性做的还算不错,基本上替换一下就转到新版本了。但是,强制flush数据的时候出了问题。目前的应用场景是,遇到顶号登录这种情形,先用bufferevent_write向客户端发送错误信息,然后再断开socket。用的flush是这样的:void try_flush(bufferevent *bev) { int size = evbuffer_get_len

2016-01-06 12:19:16 390

转载 设置Libevent库

Libevent有一些全局的设置共享给所有的程序。他影响整个库。你必须在使用Libevent任一库之前来设置这些变量,否则会导致Libevent状态的不一致。Libevnet的日志消息Libevent可以记录内部的错误和警告。如果编译添加了对日志记录的支持,你也可以记录调试信息。这些信息默认的被输出了标准错误输出。你可以提供自己的日志记录函数来覆盖原来的日志记录的方式。

2016-01-06 12:16:26 347

转载 基于事件的开源网络库—libevent:应用介绍

一、简介因memcached(见上一篇“数据缓存系统-memcached介绍”)使用了libevent作为它对外界事件(磁盘、网络等)的监控,所以对libevent就一同进行了了解、应用。按libevent的官网(http://libevent.org/)介绍,libevent是一个监视特定事件,提供回调函数的C++库,它可以监视的事件包括:1.      能以文件描述符表

2016-01-06 12:14:52 313

转载 处理大并发之 libevent demo详细分析(对比epoll)

libevent默认情况下是单线程,每个线程有且仅有一个event_base,对应一个struct event_base结构体,以及赋予其上的事件管理器,用来安排托管给它的一系列的事件。当有一个事件发生的时候,event_base会在合适的时间去调用绑定在这个事件上的函数,直到这个函数执行完成,然后在返回安排其他事件。需要注意的是:合适的时间并不是立即。例如:[cp

2016-01-06 12:13:26 312

转载 处理大并发之 对libevent的初步认识

首先翻译下http://www.wangafu.net/~nickm/libevent-book/01_intro.html里的一段文章对异步IO的一个简要介绍大多数应用程序都是阻塞的IO调用,如果IO调用是同步(阻塞)的,它不能立即返回直到它的操作完成,或者经过了很长时间直到网络栈丢弃。当你在一个TCP连接上调用”connect()”时,例如,你的操作系统从TCP连接的另一端主机

2016-01-06 12:11:25 313

转载 处理大并发之 对libevent的初步认识

首先翻译下http://www.wangafu.net/~nickm/libevent-book/01_intro.html里的一段文章对异步IO的一个简要介绍大多数应用程序都是阻塞的IO调用,如果IO调用是同步(阻塞)的,它不能立即返回直到它的操作完成,或者经过了很长时间直到网络栈丢弃。当你在一个TCP连接上调用”connect()”时,例如,你的操作系统从TCP连接的另一端主机

2016-01-06 12:10:34 347

转载 socket的发送与接收缓冲区

应用程序可通过调用send(write, sendmsg等)利用tcp socket向网络发送应用数据,而tcp/ip协议栈再通过网络设备接口把已经组织成struct sk_buff的应用数据(tcp数据报)真正发送到网络上,由于应用程序调用send的速度跟网络介质发送数据的速度存在差异,所以,一部分应用数据被组织成tcp数据报之后,会缓存在tcp socket的发送缓存队列中,等待网络空闲时

2016-01-05 16:40:13 273

VisualGDB-5.1破解版(稀有)

十分强大的visual studio 调试Linux C/C++的工具,也可以调试Android,完美破解版,十分稀有!

2016-04-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除