2008年05月10日

原创 zz Winsock服务器内存资源管理

一般来讲, 在服务器上,如果有足够的资源,Winsock server,理论上可以支持成千的并发连接。而现实是,我们没有足够的资源可供使用,分配。本文主要来讨论一下内存资源之于Winsock server开发的重要性。一)基本概念。-> Pages,Locked Pages.        在现代操作系统中,内存管理会把主存(RAM)分成Pages来管理。 Paging(或者swapping)指的是主存与外存之间以Page为单位进行数据的交换。Locked Pages指的是被锁定在主存中的内存页,以保证一些内核组件,driver可以访问到它们。windows一定会保证一定数量的可交换的内存空间,防止一些非法程序锁定所有的物理内存,而致使系统崩溃。在windows NT, windows 2000上,可锁定的内存总的大小上限大概是物理内存的1/8(当然对于程序的开发人员,不应该对这个值进行任何的假设,这个值可能会随着操作系统本版的变化而变化)。在Winsock应用开发过程中,以overlapped方式读写IO操阅读全文>

发表于 @ 2008年05月10日 09:19:00|评论(loading...)|举报|收藏

2008年05月09日

原创 zz高性能服务器软件开发

关于这本书的简单介绍: 注意,在这里我们讨论的高性能服务器软件设计并不是通常意义上的高性能web程序设计,比如说在J2EE、.NET框架下如何使用线程池提高性能,如何优化ASP,PHP程序,或者如何调整apache,IIS等Web服务器以获得更好的性能等等。 这里讨论的是真正高性能的从硬件到操作系统底层,然后到IO模型、应用模型的服务器设计,当然,作为一家之言,里面同样充满了误解、偏见和无知,但是在指责我之前,请仔细思考你指责的理由,进行仔细的测试之后把你的完整意见告诉我,我会很感谢这种建设性的指责而不是其他。 我们面临的问题 目前已经存在,而且将会越来越多的大量网络应用,它们包括: 即时聊天服务器 FTP服务器 基于互联网的媒体应用 大型购物网站 大型门户网站 在线网络游戏 而在实际使用的时候,我们经常碰到下面的情况: 连接数过多,网站无法访问。 无法下载文件,或者下载速度非常缓慢 同时连接的数量受到很大限制。 站点非常脆弱,经常受到这样那样的攻击而瘫痪。 对于这些情况,通常的解决方案是: 增加硬件的性能 使用服务器集群和负载均衡技术 更大的带宽 这些真的需要吗? 我们有没有仔细的阅读全文>

发表于 @ 2008年05月09日 15:46:00|评论(loading...)|举报|收藏

2008年05月06日

原创 软件开发基本知识

软件开发的基本知识 韩慧健 一、软件的概念 1、软件:是计算机系统中与硬件相互依存的部分,它包括程序、数据及相关文档的完整集合。其中 Ø 程序-是按照事先设计的功能和性能的要求执行的指令序列 Ø 数据-是使程序正常操纵信息的数据结构 Ø 文档-是程序开发、维护和使用有关的图文资料 2、软件分类(按功能划分) Ø 系统软件:如操作系统、数据库管理系统、设备驱动程序等 Ø 支撑软件:协助用户开发软件的工具性软件,如微软可视化开发平台工具 Ø 应用软件:为特定目的服务的软件,如财务管理软件。 二、软件工程和软件开发 1、 软件工程 Ø 一系列完善的工程化原则。 软件工程是为经济地获得能够在实际机器上有效运行的可靠软件而建立和使用的一系列完善的工程化原则。 Ø 软件工程是开发、运行、维护和修复软件的系统方法。 1983年,IEEE(电气和电子工程师学会)作出定义,软件工程是开发、运行、维护和修复软件的系统方法。软件定义为:计算机程序、方法、规则、相关的文档资料以及在计算机上运行时所必须的数据。 Ø 主要思想是强调软件开发过程需要英语工程化的原则。 2、 软件的生存周期 按照软件工程的过程(p阅读全文>

发表于 @ 2008年05月06日 19:45:00|评论(loading...)|举报|收藏

原创 zz C++程序员常用工具集

【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/  所谓"工欲善其事,必先利其器",从程序员的角度来讲,好工具的使用总会给人带来事半功倍的效果。面对众多工具/软件,我们应该如何取舍呢。前不久,笔者在csdn的c++论坛发了一篇贴文,以期能征求大家的广泛意见,得到了不错的反响。本文在对该贴进行整理的基础上,又做了一些补充。在这里要特别感谢网友:DanielWYO(爱上小白),redleaves(无心红叶)。 有以下几点需要声明: 本文主要是针对c++程序员的,但一些综合类的通用型工具/软件,作为c++程序员而言也是不可或缺的,因此也被列入其中。同样,这些工具/软件,对其他语言的程序员,也是适用的。      对所列各类工具/软件的评价,其依据是多数网友的观点汇总,并结合了笔者自己的个人观点,供参考,如有不实之处,欢迎指正。      对所列各类工具/软件的排名不分先后,其中既有Open source软件,也有商业产品。对于前者,我将提供下载地址,对于后者,我将尽量提供相关信息的参考网址。      这份清单并非stat阅读全文>

发表于 @ 2008年05月06日 16:51:00|评论(loading...)|举报|收藏

2008年05月02日

原创 zz 软件体系结构的概念

一 从软件危机谈起  软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。20世纪60年代末至20世纪70年代初,"软件危机"一词在计算机界广为流传。事实上,几乎从计算机诞生的那一天起,就出现了软件危机,只不过到了1968年在原西德加密施(Garmish)召开的国际软件工程会议上才被人们普遍认识到。  1 软件危机的表现  (1)软件成本日益增长  在计算机发展的早期,大型计算机系统主要是被设计应用于非常狭窄的军事领域。在这个时期,研制计算机的费用主要由国家财政提供,研制者很少考虑到研制代价问题。随着计算机市场化和民用化的发展,代价和成本就成为投资者考虑的最重要的问题之一。20世纪50年代,软件成本在整个计算机系统成本中所占的比例为10%-20%。但随着软件产业的发展,软件成本日益增长。相反,计算机硬件随着技术的进步、生产规模的扩大,价格却不断下降。这样一来,软件成本在计算机系统中所占的比例越来越大。到20世纪60年代中期,软件成本在计算机系统中所占的比例已经增长到50%左右。  而且,该数字还在不断地递增,下面是一组来自美国空军计算机系统的数据:1955年,软件费用约阅读全文>

发表于 @ 2008年05月02日 15:14:00|评论(loading...)|举报|收藏

原创 zz Windows体系结构

  这是整个windows的体系结构的总览。从图上可以看出系统被分成内核模式和用户模式。 内核模式的构成文件是系统的核心文件她包含: hal.dll ntoskrnl.exe 设备驱动 文件系统驱动 图形设备驱动 win32k.sys 1.首先来看第一层HAL(硬件抽象层)   HAL使得reactOS  内核可以运行在不同的x86母板上。HAL为内核抽象母板的特定代码也许是对不同母板定义一种抽象的接口,向上提供一种标准的接口调用,这样不同的母板就不需要改变内核,思想上有点像驱动程序的设计,不过用在另外一个地方(具体的实现目前还不知道,以后边看代码边了解)。 2.ntoskrnl(内核) 内核又分成两层,第一层有的称为核心层(core)提供非常原始且基本的服务,如多处理器的同步、线程调度、中断分派等等。第二层是执行体(EXECUTIVE)内核执行体提供了系统的服务,这里的服务不是指windows服务管理器看到的那种服务,而是一些系统函数。而这些函数被划分成不同的类别: 具备虚拟存储的内存管理:采用分段和分页以及虚拟内存的方式管理内存的使用。 阅读全文>

发表于 @ 2008年05月02日 14:18:00|评论(loading...)|举报|收藏

2008年04月17日

原创 zz static_cast揭秘

本文讨论static_cast 和 reinterpret_cast。 介绍大多程序员在学C++前都学过C,并且习惯于C风格(类型)转换。当写C++(程序)时,有时候我 们在使用static_cast和reinterpret_cast时可能会有点模糊。在本文中,我将说明 static_cast实际上做了什么,并且指出一些将会导致错误的情况。 泛型(Generic Types) float f = 12.3; float* pf = &f; int n = static_cast(f);// 成功编译, n = 12 //int* pn = static_cast(pf);// 错误,指向的类型是无关的 //(译注:即指针变量pf是float类型,现在要被转换为int类型) void* pv = static_cast(pf);// OK 阅读全文>

发表于 @ 2008年04月17日 19:21:00|评论(loading...)|举报|收藏

原创 zz More Effective C++读书笔记

条款1:指针与引用的区别二者之间的区别是:在任何情况下都不能用指向空值的引用,而指针则可以;指针可以被重新赋值以指向另一个不同的对象,但是引用则总是指向在初始化时被指定的对象,以后不能改变。在以下情况下使用指针:一是存在不指向任何对象的可能性;二是需要能够在不同的时刻指向不同的对象。在以下情况使用引用:总是指向一个对象且一旦指向一个对象之后就不会改变指向;重载某个操作符时,使用指针会造成语义误解。 条款2:尽量使用C++风格的类型转换static_cast:功能上基本上与C风格的类型转换一样强大,含义也一样。但是不能把struct转换成int类型或者把double类型转换成指针类型。另外,它不能从表达式中去除const属性。const_cast:用于类型转换掉表达式的const或volatileness属性。但是不能用它来完成修改这两个属性之外的事情。dynamic_cast:用于安全地沿着类的继承关系向下类型转换。失败的转换将返回空指针或者抛出异常。reinterpret_cast:这个操作符被用于的类型转换的转换结果时实现时定义。因此,使用它的代码很难移植。最普通的用途就是在函数阅读全文>

发表于 @ 2008年04月17日 14:39:00|评论(loading...)|举报|收藏

2008年04月09日

原创 zz使用界面库LibUIDK制作界面

LibUIDK简介:LibUIDK是专业开发Windows平台下图形用户界面的开发包,该开发包基于Microsoft的MFC库。使用此开发工具包可轻易把美工制作的精美界面用VC实现,由于使用LibUIDK创建的所有窗口都支持控件的从控件工具栏中拖入创建,所以极大的提高了新产品的开发速度,并大大增强图形用户界面(GUI)的亲和力。LibUIDK还可以使您的软件轻松具有当今流行的换肤功能,以提高产品的竞争力。 LibUIDK的目标用户:任何使用Microsoft Visual C++ 6.0、Microsoft Visual C++.NET的程序开发人员。 系统需求:Win2K、WinXP、Win2003及VC++6.0或VC++.NET。 主要特点:快速创建窗口:  使用LibUIDK创建一个窗口与VC创建一个对话框一样方便,所见即所得的操作方式,极易上手。UIShop在设计时尽量模拟VC6.0创建一个对话框那样来创建UI窗口。支持换肤:  你可以为同一个应该程序创建多个不同的皮肤,每个皮肤可以有不同的外观,不同的控件布局,也就是说,同一个控件在一 套皮肤中位于窗口阅读全文>

发表于 @ 2008年04月09日 21:51:00|评论(loading...)|举报|收藏

2008年04月06日

原创 zz传奇源码分析-服务器端

LoginGate服务器 服务器端: 1.首先从LoginGate.cpp WinMain分析:     1) CheckAvailableIOCP : 检查是不是NT,2000的系统(IOCP)     2) InitInstance: 初始化界面,加载WSAStartup 3)  MainWndProc窗口回调函数. 2.MainWndProc.CPP中分析回调函数MainWndProc switch (nMsg)     {         case _IDM_CLIENTSOCK_MSG:         case WM_COMMAND:         case WM_CLOSE:     g_ssock Lo阅读全文>

发表于 @ 2008年04月06日 11:11:00|评论(loading...)|举报|收藏

Csdn Blog version 3.1a
Copyright © stroller