- @smark
从cpu利用率上看,核心态只占用到10%-15%,大部分是用户态的利用率. - @smark
而且从cpu的利用率看,核心利用率只占用到20%左右,剩下的全是用户态利用率. - @smark
不满,60%左右,将包字节加到40左右才占满。共用缓冲0拷贝的机制,收包缓冲,直接被用作发包缓冲,不管发往几个客户端。300W/380/10/2,也就只平均每次执行发送都合并了近394个包. - @smark
不完全是,因为带宽还没满。达到这个量的时候cpu已经是瓶颈,接收方cpu利用率很低,因为收包后直接丢弃。而发送方每秒要做几百万次的遍历和转发,cpu已经扛不住了。 - 改成50ms统一发送一次后,性能提高到290-300W左右,目前看来还算稳定,准备进一步加连接数看看。
- E5520 2.27的服务器,可以处理到340W/s,内部千兆网,延时平均在45ms.
- 盲目的迷信多线程不是件好事,对普通的上层开发人员来说,如果让他感觉到了多线程的存在,那是架构有问题。所以,首先看你想招的是什么人,再考虑要问什么问题.
- 那伤害具体是由攻击方还是遭受方来判定呢,攻击方认为击中,遭受方认为闪避,怎么处理。
- 单线程,只要人不是集中在一块,2000人是没问题的。如果全在一块,700人千兆已经抗不住了。
- 这几天编写了一个测试程序,测试我的网络库(KendyNet Windows版本)的性能,主要用于模拟大量玩家在同一区域内,互相可见情况下网络的压力情况.测试环境:客户机和服务器 E5520 4GB w...
- https://github.com/sniperHW/KendyNet/tree/master/IOCP
项目代码在这,有测试程序,原来的C++版本没做过测试,已经废弃,
这里是最新的C版本 - 本文贴出用C语言重写的网络封包,主体设计思路前文已经介绍过,就是尽可能的共享缓存,减少不必要的内存拷贝.其次,封包主要是为了适合网络游戏等有固定模式的,面向字节流的协议,所以并不适合用于http类协议...
- 我们服务器确实是windows的,但我写的东西跟我们目前的服务器无关,
linux和windows都实现了对应的接口。 - 百兆网是的,我用的是千兆网
- 一个IOCP单线程,250连接,每包大小64字节,每次只发一个包,我测算过每秒峰值能达到80w个,平均情况是70W左右。
- 前面写了一系列文章都是关于网络底层机制封装的,后面要慢慢的将这些机制组装起来,实现一套可用的网络库。既然是网络库,自然少不了对缓存的管理,本文实现一个带引用计数的buffer,作为packet的底层缓...
- 非阻塞Accept和Connect的封装器,WINDOWS版本acceptor#ifndef _ACCEPTOR_H#define _ACCEPTOR_Htypedef struct acceptor...
- lua中默认的number类型是double的,在游戏中很多数据类型用到了64位整型,虽然可以通过重定义lua_Number为__int64以支持64位整型,但这又丢失了对浮点数的支持.好在可以很方便...
- http://www.cnblogs.com/sniperHW/archive/2012/04/24/2468186.html
http://www.cnblogs.com/sniperHW/archive/2012/04/09/2438850.html
http://www.cnblogs.com/sniperHW/archive/2012/04/07/2436385.html
这里几篇介绍了各种epoll实现网络层的模式. - 前段时间写过一篇博客介绍epoll边界触发模式的三种实现模式,并在http://www.cnblogs.com/sniperHW/archive/2012/04/09/2438850.html中贴出了...
- @egmkang
你指运行效率还是开发效率 - @egmkang
我个人不是很喜欢tolua++这种方式。 - lua没有提供专门的调试器,但却提供了一些接口函数,用以实现你自己的调试器。下面实现了一个简单的基于命令行的lua调试器,提供一些最最基本的调试功能。这里面只用到了3个基本的lua调试函数,debug...
- 这是一个几年前写的对lua的访问封装,当时的项目仅提供了最基本的lua访问接口:调用lua函数,向lua注册标准格式的C++函数.本来我想引进luabind,但luabind相对又过于复杂,并不是所有...
- 看错你的意思了,不用理会。
- typedef struct pointer_array
{
size_t len;
void * array;
}pointer_array_t;
和
typedef struct zero_array
{
size_t len;
void * array[0];
}zero_array_t;
是不等价的. - @westfly
如果你是指为什么提供迭代器而不是提供一个for_each函数的话,我的本意是为双向遍历列表提供遍历,也便于在迭代的过程中删除元素。虽然效率相对低一点,但使用跌代更加灵活。for_each本来也是要提供的,只是最近没空写.










