- 博客(163)
- 资源 (61)
- 收藏
- 关注
翻译 WinSock五种I/O模型性能分析
五种I/O模型的性能分析重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有的扩展函数。当使用重叠I/O模型时,可以选择使用不同的完成通知方式。采用事件对象通知的重叠I/O模型是不可伸缩的,因为针对发出WSAWaitForMultipleEvents调用的每个线程,该I/O模型一次最多都只能支持6 4个套接字。假如想让这个模型同时管理不止64个套接字,必须创建额外的工作者
2009-12-27 18:54:00 3193 1
原创 应用层通信协议开发浅析
通信协议精确地定义了双方通信控制信息和解释信息。协议反映的是对等层的对等实体之间的一种横向关系,严格地说,协议是对等实体共同遵守的规则和约定的集合。
2009-12-27 15:20:00 21527 8
原创 WinSock完成端口I/O模型
完成端口对象取代了WSAAsyncSelect中的消息驱动和WSAEventSelect中的事件对象,当然完成端口模型的内部机制要比WSAAsyncSelect和WSAEventSelect模型复杂得多。
2009-12-27 14:50:00 6639 3
翻译 深度探索I/O完成端口
引言要想编写一个高性能的服务器应用程序,必须实现一个高效的线程模型。让太少或者太多的服务器线程来处理客户的请求,都可能导致性能问题。例如,如果一个服务器创建单个线程来处理所有的请求,那么客户端可能长期等待而得不到响应,因为服务器同一时刻只能忙于处理一个请求。当然单个线程也能并发处理多个请求,当I/O操作被启动时,它可以从一个请求切换到另一个请求,但是这种结构相当复杂,并且不能充分利用多处理器的
2009-12-27 14:47:00 4982
原创 WinSock重叠I/O模型
一.重叠I/O模型的概念当调用ReadFile()和WriteFile()时,如果最后一个参数lpOverlapped设置为NULL,那么线程就阻塞在这里,直到读写完指定的数据后,它们才返回。这样在读写大文件的时候,很多时间都浪费在等待ReadFile()和WriteFile()的返回上面。如果ReadFile()和WriteFile()是往管道里读写数据,那么有可能阻塞得更久,导致程序性能下
2009-12-27 14:41:00 5982
原创 WinSock三种选择I/O模型
select模型本质上是一种分类处理思想,预先声明几个FD_SET(fd_set结构)集合(使用FD_ZERO初始化),例如ReadSet、WriteSet,fd_set数据类型本质上代表着一系列按关注事件分类的套接字集合。本文讨论三种选择模型(都带select,姑且这样称呼):select(选择)、WSAAsyncSelect(异步选择)、WSAEventSelect(事件选择)。
2009-12-27 14:38:00 5572
原创 WinSock编程基础
在 UNIX 系统中,任何 I/O 操作都是通过读写文件描述符(File Descriptor)来实现的。网络通信 I/O 机制也是基于文件描述符来定义实现的。鉴于 WinSock 1 是 WinSock 2 的功能子集,而 WinSock 1 又沿袭兼容 Berkeley Socket API 集,故本文基于 WinSock 1 讲述 socket 编程基础,着重梳理周边背景知识及通用通信流程。
2009-12-27 14:30:00 63720 11
原创 socket基本概念及C/S通信模式
套接字,简单的说就是通信双方的一种约定,用套接字中的相关函数来完成通信过程。应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。本文初步梳理了socket相关概念和模式。
2009-12-27 14:20:00 11885
转载 TCP/IP数据报格式
IP数据报格式IP数据报(datagram)的头部格式如下:Version:4 bits版本字段标明建立数据报的IP版本,目前的IP版本是IPv4,IPv6正在发展中。IPv4:0100。IHL:4 bitsIP数据报头部长度(Internet Header Length),其度量单位为4 Bytes(32 bits),因此IHL始终是4 Bytes(32 bi...
2009-12-27 14:08:00 4702 1
原创 I/O管理器及IRP缓冲区管理
I/O管理器 I/O 管理器定义了有序的结构,或者说是模型,在这个模型里将I/O请求发送给设备驱动程序。I/O系统是包驱动的,大部分I/O请求用I/O请求包(IRP)代表,从一个I/O系统组件传送到另一个组件。(注意:快速I/O不是IRP。)这种设计允许一个应用程序线程可以同时管理多个I/O请求。一个IRP是一个数据结构,包含了完整地描述一个I/O请求的信息。(可以通过Windbg内核调试扩展
2009-12-26 22:36:00 2384
原创 线程的调度
概述Windows 实现了一个由优先级驱动,抢占式的调度系统,也就是最高优先级的可运行的(就绪状态下的)线程总是先运行。 有一种现象称之为“处理器亲合(processor affinity)”,即线程可能受处理器限制,只运行在那些允许它运行的处理器上。缺省的设置是线程可运行在任何可用的处理器上,用户可以通过使用一个Win32的调度函数修改处理器的“亲合性”。 当一个线程被选择运行,它所
2009-12-26 22:26:00 13616
原创 线程的数据结构
除非显式地声明,否则,你可以假设以下讨论的内容既适合用户模式的线程,也适用于内核模式的线程。在系统级别上,Windows线程是由一个线程块执行体(ETHREAD)来表示的,如图6.7所示。ETHREAD块和它所指向的结构都位于系统地址空间中,唯一的例外是线程环境快(TEB),它位于进程地址空间中。而且,Windows子系统进程(Csrss)为Windows进程中创建的每个线程维护了一个平行结构
2009-12-26 22:24:00 7873
原创 MFC GDI坐标映射例解
(1)建立单文档MFC项目Draw:NewàProjectsàMFC AppWizard(EXE)àSingle Document。(2)找到CMainFrame::PreCreateWindow函数,在其中设置默认窗口大小为400 pixel*300 pixel。BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){ if(
2009-12-26 21:54:00 3833
原创 MFC GDI绘图基础
一.关于GDI的基本概念什么是GDI?Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上。在Windows操作系统中,动态链接库C:/WINDOWS/system32/gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素、在打印机上输出硬拷贝
2009-12-26 21:39:00 19661 1
原创 Windows编程之MFC向导程序框架
1.使用MFC AppWizard生成一个单文档应用程序框架。(1)启动Visual Studio 6.0(2) 文件->新建->项目->MFC AppWizard(exe)->输入项目名称MySDI(3) Step1,选择Single Document。(4) Step2~6,选择默认。(5) F7,Build MySDI.exe即可运行。 2.MFC程序框架
2009-12-26 21:07:00 4103
原创 Windows编程之MFC窗口程序浅析
除了传统的SDK方式编写Windows应用程序外,还可以使用微软的基础类库MFC。它采用C++程序设计语言对SDK函数进行包装,使Windows下的C语言程序设计,成为面向对象的MFC。以下为MFC窗口应用程序框架示例及解析。 1.建立Win32项目FirstMFC打开Visual Studio 2005à文件à新建à项目àVisual C++àwin32àwin32项目àwin
2009-12-26 20:54:00 11295
原创 Windows编程之SDK窗口程序浅析
#include BOOL InitWindowsClass(HINSTANCE hInstance); // 注册窗口类BOOL InitWindows(HINSTANCE hInstance, int nCmdShow); // 创建窗口LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LP
2009-12-26 20:44:00 3976
原创 Windows编程之从控制台到SDK窗口
1.典型C/C++程序/*HelloC.c*/#includeint main(int argc, char *argv[]){ printf("Hello C!/n"); return 0;}// HelloCPP1.cpp#includeint main(int argc, char *argv[]){ std::cout
2009-12-26 20:38:00 3788 1
原创 Windows编程之基础概念篇
一.几个What什么是API?API是英文 Application Programming Interface 的简称,意为“应用程序接口”,泛指系统为应用程序提供的一系列接口函数。Windows API是Windows操作系统与应用程序之间的标准接口,它提供了上千个API标准函数、宏和数据结构。在使用VB,VC,Dephi编写应用程序时都可以调用Windows API函数。 什么是S
2009-12-26 20:32:00 1835 1
原创 由MessageBox透视Win32 API的调用
下面我们来看看Windows平台下应用程序是怎么调用Windows提供的底层API服务运行的。 我们编写Win32SDK程序时,需要弹出对话框以作出友好的选择,MessageBox这个API函数就可以实现该功能。在开头要添加,因为其包含了众多的API函数声明头文件。为了探究这个小小的MessageBox是怎么弹出来的,我们右击MessageBox,选择“Go to definition of
2009-12-26 20:21:00 6102 1
原创 从char/wchar_t到TCHAR
为什么要使用UNICODE?(1) 可以很容易地在不同语言之间进行数据交换。(2) 使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。 (3) 提高应用程序的运行效率。
2009-12-26 20:08:00 7517 2
原创 Windows/MFC数据类型
#define FALSE 0 afx.h#define TRUE 1 afx.h#define NULL 0 afx.htypedef void VOID winnt.h // 短整型typedef unsigned shorttypedef unsig
2009-12-26 20:01:00 1957 2
原创 Visual C++ 2005使用入门
功能强大的Visual studio 2005 IDE庞大的开发环境和N多的配置设置,学习起来还不是很简单。C++/CLI通过对ISO C++ 标准的纯粹扩展和新语法,不像传统的MS-DOS 控制台程序,所以对于新手,首先应弄明白怎样在Visual studio 2005开发环境下编译常规控制台应用程序及Windows应用程序。 1)win32控制台应用程序文件à新建à项目à Visu
2009-12-26 19:44:00 3568
原创 多重继承和虚基类
//派生类成员函数对基类成员函数的覆盖#include "stdafx.h"#includeclass A{public: void Show() { std::cout"A::Show/n"; }}; class B:public A{public: void Show() {
2009-12-26 15:18:00 1642
原创 C++继承
(1)派生方式class 派生类名>:[派生方式]基类名>{ //派生类新增成员的声明}在上述派生类的定义中,“派生方式”决定了基类成员在派生类中的访问权限。派生的方式共有public、private、protected(默认派生方式为private)。 虽然派生类继承了基类的所有成员,但是为了不破坏基类的封装性,无论采用哪种继承方式,基类的私有(pr
2009-12-26 15:11:00 1317
原创 C++构造函数和析构函数
(1)构造函数、析构函数与赋值函数构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如:A(void);
2009-12-26 15:01:00 2628
原创 野指针小结
1.指针的初始化指针变量的零值是“空”(记为NULL)。在中#define NULL 0,尽管NULL 的值与0 相同,但是两者意义不同。假设指针变量的名字为p,它与零值比较的标准if 语句如下:if (p == NULL) // p 与NULL 显式比较,强调p 是指针变量。当我们试图析取(dereference)一个空指针NULL时,例如int *p = NULL;当我们试图cou
2009-12-26 14:34:00 2163
原创 函数指针与指针传参
1.函数指针(1)函数指针的声明函数指针形式说明如下:返回类型>(*指针变量名)(形参列表);其调用格式如下所示:int max(int x,int y); // 定义函数maxint (*funcp)() = max;//定义返回值为整型的函数指针funcp = max;//函数名同数组名一样隐式转换为函数入口地址),funcp指向函数
2009-12-26 14:30:00 8536
原创 字符串与指针
字符/0和0的区别字符’0’对应的ASCII码为十六进制30;而’/0’即为ASCII码中的0,其对应字符空字符NUL。 char c = /0;çèchar c = 0 // NUL char c = 0;çèchar c = 48;最典型如memset函数:void *memset( void *buffer, int ch, size_t co
2009-12-26 14:28:00 7898 1
原创 数组与指针
一个不带下标的数组名就是一个指向此数组的指针,具体来说就是第一个数组元素的地址。当一个指针变量被初始化为数组名时,就说该指针变量指向了数组(首元素)。
2009-12-26 14:21:00 1976 1
原创 字节存储单元及struct内存分配
当今的计算机系统使用的基本上都是由18世纪德国数理哲学大师莱布尼兹发现的二进制系统。二进制数字系统中只有两种二进制数码——0和1。“bit”(比特)被创造出来代表“binary digit”,1bit代表一个二进制数位。在有限范围内的可计量数值几乎都可以用二进制数码串组合表示,计算机的内存由数以亿万计的比特位存储单元(晶体管)组成。由于一个位只能表示二元数值,所以单独一位的用处不大。通常将许多位组成一组作为一个基本存储单位,这样就可以存储范围较大的值。
2009-12-26 13:35:00 9466 3
原创 C++ Library
SGI -- Silicon Graphics[Computer System] Inc.硅图[计算机系统]公司.STL -- Standard Template Library,标准模板库。
2009-12-26 13:31:00 4033
原创 C++ Storage Classes, Scope and Lifetime
在C语言中,每一个变量都有两个属性:数据类型(Variable Types)和存储类型(Storage Classes)。存储类型则指变量在内存中的存储方式,它决定了变量的作用域(Scope)和生存期(Lifetime)。
2009-12-26 13:26:00 2131
原创 C++ Variable Types
在C语言中,每一个变量都有两个属性:数据类型(Variable Types)和存储类型(Storage Classes)。数据类型即常说的字符型、整型、浮点型。
2009-12-26 13:05:00 2907 1
https访问github.com的Wireshark抓包文件
2017-06-04
设计模式参考资料
2013-06-07
vxWorks Developer's Guide
2013-05-13
Realtek的rtl8196c_datasheet和sdk指南
2013-04-26
AR9331_DataSheet
2013-04-25
MIPS Assembly Language
2013-04-25
VxWorks END模型及示例代码
2013-04-25
VxWorks BSP Pre-Kernel Init and Boot
2013-04-25
VxWorks启动流程
2013-04-25
Intel80x86 OPCODEs - 80x86机器码汇编对照表
2013-04-21
MikroTik RouterOS安装及配置图解教程
2011-12-01
QoS参考资料.part1
2011-06-26
QoS参考资料.part2
2011-06-26
《A Simple IOCP Server/Client Class》
2011-01-14
windows网络编程技术1(Anthony Jones&Jim Ohlund+英语chm+中文pdf+code)
2010-12-13
数据结构C语言版(陈峰棋)pdf.part2
2010-12-06
数据结构C语言版(陈峰棋).pdf.part1
2010-12-06
Standard C-C++ Reference
2010-12-06
Windows程序设计(Charles Petzold)
2010-12-06
Windows程序设计(王艳平)
2010-12-03
MFC深入浅出(李进久).chm
2010-12-03
WINDOWS核心编程(Jeffrey Richter)
2010-12-03
Windows 2000系统编程.pdf
2010-12-03
Programming Visual C++.chm
2010-12-03
Developing user interfaces for Microsoft Windows.chm
2010-12-03
The C/C++ Programming Language
2010-12-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人