c++socket模型之我见

本文探讨了C++中TCP和UDP套接字模型的选择,强调在性能和资源消耗上的考虑。TCP由于维护连接和错误处理消耗较大,适合连接数目多的情况,采用完成端口模型。而UDP简单高效,适合少量连接或服务器,推荐使用重叠模型。
摘要由CSDN通过智能技术生成

能用UDP尽量用UDP,能不用TCP就不用。TCP要维护连接,错包重发,确认,错序调整等。

消耗比较大。UDP只需要再一个端口上进行IO操作,而TCP则需要再不同的端口上进行IO操作。

 

假设说用TCP:

案例1:

    建立一个同时维持1000个链接的服务器。

先说缺点

1。阻塞模型:

   1000个链接需要建立2000个线程去receive和send数据。开销相当大。

2。select模型:

   一个线程搞定所有的事情。不过1000个线程,建立FD_SET集的内存开销不说,最重要的是,Select函数本身可能就比较慢,因为要访问所有的socket.其次,select即使返回了,对于1000个socket来说,就要有3000次判断!而此时有可能只有一个socket的某一个FD事件发生!

3。WSAAynSelect模型:

     这个WSAAynSelect是异步的,最大的优势是在开销不是很大的情况下可以同时处理多个链接。比select模型节省3000*4字节的内存开销。但是如果同时维护1000个链接,其消息队列的处理速度有可能成为其性能瓶颈。

4。WSAEventSelect模型:

     这个模型不进消息队列,处理速度比WSAAsnSelect好。也能同时维护很多链接。但是最多也就是Waifor只能64个,如果要多个的话,需要建立额外的线程。如果1000个链接,那么Waifor将至少建立15个线程。这将是很大的一笔开销。同时由于event与socket进行了绑定,1000个链接必须要求有1000个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值