- 博客(13)
- 资源 (1)
- 收藏
- 关注

转载 高性能大容量SOCKET并发(五):锁和对象分离 .
锁和对象一起封装的危险在多线程编写中,绝大多数编码风格喜欢把锁和要访问的对象封装在同一个对象,释放对象的时候也释放锁,这样会造成死锁。我们写一个测试例子,我们创建一个锁,把锁锁住,然后再创建一个线程,一直不停的等待锁返回,然后我们把锁释放,这时线程就死锁,代码如下:定义接口:[delphi] view plaincopyprint?type TLo
2012-09-20 16:28:12
734

转载 高性能大容量SOCKET并发(四):粘包、分包、解包
粘包使用TCP长连接就会引入粘包的问题,粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。粘包可能由发送方造成,也可能由接收方造成。TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据,造成多个数据包的粘连。如果接收进程不及时接收数据,已收到的数据就放在系统接收缓冲区,用户进程读取数据时就可能同时读到多个数据包。粘
2012-09-10 10:08:13
1901

转载 高性能大容量SOCKET并发(三):接收、发送、缓存
接收完成端口是结合重叠端口一起使用的,在接收数据之前,我们需要投递一个接收请求,使用function WSARecv(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD; var lpNumberOfBytesRecvd, lpFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED; lpCompl
2012-09-10 10:07:15
2927

转载 高性能大容量SOCKET并发(二):IOCP完成端口控件封装
IOCP完成端口介绍:完成端口模型是Windows平台下SOCKET端口模型最为复杂的一种I/O模型。如果一个应用程序需要同时管理为数众多的套接字,而且希望随着系统内安装的CPU数量的增多,应用程序的性能也可以线性提升,采用完成端口模型,往往可以达到最佳的系统性能。完成端口可以管理成千上万的连接,长连接传文件可以支持5000个以上,长连接命令交互可以支持20000个以上。这么大并发的连
2012-09-10 10:04:18
1428

转载 高性能大容量SOCKET并发(一):IOCP完成端口例子介绍
例子主要包括IOCP控件封装、服务端实现、传输协议和日志、控制、SQL查询、上传、下载等协议实现,并包括一些初步的性能测试结果。服务端:界面截图如下:提供服务和桌面方式运行,桌面方式可直接打开程序,方便日常调试,可以使用命令行注册或卸载服务,在CMD中输入D:\DEMO\IOCPDemo\Bin\IOCPDemoSvr.exe -install来注册服务,在CMD输入D:\DE
2012-09-10 09:48:14
1511
1
原创 C#多线程,静态锁static lock和非静态锁lock的区别及附跨线程访问UI的代码
本文只针对C#中,多线程同步所用到的锁(lock)作为研究对象。由于想更直观的显示结果,所以,在做demo的时候,就把多线程通过事件操作UI的代码也写了出来,留作备忘和分享吧。 其实多线程的同步,使用同步锁的方法用了好多次,今天无意中看到MSDN中,建议用:1 private static readonly object locker1 = new object();2
2014-11-17 22:49:47
13905
1
原创 DELPHI、FLASH、AS3、FLEX使用Protobuf(google Protocol Buffers)的具体方法
最近因为工作需要,需要在不同的开发环境中应用Protobuf,特此,我专门研究了一下。为了防止自己忘记这些事情,现在记录在这里!需要的朋友可以借鉴一些,因为这些东西在GOOGLE和百度上搜索起来真的很费劲!一、首先说DELPHI的。因为DELPHI现在用的人不多了,所以找这个东西真心不好找!还好,加了几个QQ群,有用过的朋友告诉了我!具体步骤如下:1、下载D
2013-11-22 10:03:20
2708
转载 C++数组定义和操作
一、数组定义和初始化 1: 一维数组初始化: 2: 标准方式一: int value[100]; // value[i]的值不定,没有初始化 3: 标准方式二: int value[100] = {1,2}; // value[0]和value[1]的值分别为1和2,而没有定义的value[i>1] 4:
2012-10-08 10:18:49
3555
转载 C++指针的教程
第一章。指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让 我们分别说明。 先声明几个指针放着做例子: 例一: (1)int *ptr; (2)char *ptr; (3)int **ptr;
2012-10-07 19:59:08
763
转载 关于指针和内存的几个问题
关于指针和内存的几个问题一、"delete p" 会删去 "p" 指针,还是它指到的资料,"*p" ?该指针指到的资料。"delete" 真正的意思是:「删去指针指到的东西」(delete the thing pointed to by)。同样的英文误用也发生在 C 语言的「释放」指标所指向的记忆体("free(p)"真正的意思是:"free_the_stuff_pointed_t
2012-10-07 18:31:36
458
转载 C语言入门之多维数组的指针变量
C语言入门之多维数组的指针变量一、多维数组地址的表示方法 设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11 设数组a的首地址为1000,各下标变量的首地址及其值如图所示。 在前面曾经介绍过, /data/c/C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一
2012-10-07 18:29:01
962
转载 C语言入门之指针的慨念
1 C语言入门之指针的慨念指针是/data/c/C语言中广泛使用的一种数据类型。 运用指针编程是/data/c/C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象/data/huibian/汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了/data/c/C语言的功能。 学习指针是学习/data/c/C语言中最重要的一环, 能
2012-10-07 18:26:34
961
转载 线程!线程!!线程!!!(Delphi版)
以下内容仅供初学者参考看到有的同学对Delphi的线程认识不够深,特开一贴给同学们讲讲。主要给出两种常用的线程形式。1、长等待型线程示例,等待命令,执行不定长的工作,但每个工作的时间不会太长。2、长工作型线程示例,执行一个很长时间的工作,但可以很快响应取消操作。注:对于在线程中取消存储过程的执行仍然无解以下程序所用的知识为:消息机制以及常用的API函数
2012-09-10 10:19:11
644
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人