C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型
来源:互联网 发布:货币资金的数据来源于 编辑:程序博客网 时间:2024/05/16 06:18
C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型
分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。
线程模型
SocketAsyncEventArgs编程模式不支持设置同时工作线程个数,使用的NET的IO线程,由NET底层提供,这点和直接使用完成端口API编程不同。NET底层IO线程也是每个异步事件都是由不同的线程返回到Completed事件,因此在Completed事件需要对用户对象进行加锁,避免同一个用户对象同时触发两个Completed事件。
使用ProceXP可以看到服务端在比较忙的时候,服务的线程会越多。在Completed事件加锁有好处是后续逻辑处理都是串行的,可以不用考虑线程同步。还有一个地方需要注意的是断开超时连接,由于超时连接会调用Shutdown函数来强行中断SOCKET,因此在守护线程调用时,也需要锁住userToken对象。 在CloseClientSocket方法中,对m_asyncSocketUserTokenPool和m_asyncSocketUserTokenList进行处理的时候都有加锁,代码如下:
在有些性能要求更高的系统,特别是在一些C++写的完成端口中,会使用原子操作来代替锁,这样做的好处是不用进行系统内核和用户态切换,性能会高。不过技术比较偏门,不易维护,而且实际表现需要进行多方面测试,这类优化更建议优化业务逻辑,并尽量减少内存分配和释放。
DEMO下载地址:http://download.csdn.net/detail/sqldebug_fan/7467745
免责声明:此代码只是为了演示C#完成端口编程,仅用于学习和研究,切勿用于商业用途。水平有限,C#也属于初学,错误在所难免,欢迎指正和指导。邮箱地址:fansheng_hx@163.com。
0 1
- C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型
- C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型
- C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装
- C#高性能大容量SOCKET并发(九):断点续传
- C#高性能大容量SOCKET并发(六):超时Socket断开(守护线程)和心跳包
- C#高性能大容量SOCKET并发(六):超时Socket断开(守护线程)和心跳包
- DELPHI高性能大容量SOCKET并发(十):IOCP完成端口性能优化
- Netty高性能大容量Socket并发
- C#高性能大容量SOCKET并发(一):IOCP完成端口例子介绍
- C#高性能大容量SOCKET并发(四):缓存设计
- C#高性能大容量SOCKET并发(三):接收、发送
- C#高性能大容量SOCKET并发(一):IOCP完成端口例子介绍
- C#高性能大容量SOCKET并发(七):协议字符集
- C#高性能大容量SOCKET并发(五):粘包、分包、解包
- C#高性能大容量SOCKET并发(八):通讯协议
- C#高性能大容量SOCKET并发(零):代码结构说明
- C#高性能大容量SOCKET并发(十一):编写上传客户端
- C#高性能大容量SOCKET并发(五):粘包、分包、解包
- leetcode 485 Max Consecutive Ones C++
- Spring配置文件<context:property-placeholder>
- 奇怪的分式
- 指针数组和数组指针的区别
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型
- 作业:c++作业3-项目2
- 《剑指Offer》 包含min函数的栈
- jdk动态代理源码剖析
- 细细探究MySQL Group Replicaiton — 配置维护故障处理全集
- celery 任务队列预取机制
- MIT 线性代数(16—18)读书笔记
- SVProgressHud 自定义颜色
- zookeeper c client编译