Pure Soul

socket
Linux

I/O多路复用之epoll

epoll 如果说epoll和select/poll在什么地方具有相同点,那么他们的共同点在于epoll也是需要将监听的文件描述符纳入自己的"监管"。但是select和poll存在自己的一些“天生”的缺点,比如都需要不断地在用户空间和内核空间进行反复的拷贝传递,以及它们在轮询查找可读可写事件的时间复杂度都是线性时间复杂度(表现在select/poll返回值包括了就绪的事件和未就绪的事件,而之后是需要我们自己去判断哪一个文件描述符是就绪了的)。但是,一旦并发量上来了(到达10W和100W级别),如果还是线性的轮询时间…

2021年11月1日 0条评论 834点热度 0人点赞 ycq 阅读全文
Linux

I/O多路复用之poll

poll select, poll, epoll是IO多路复用当中的重要的三种实现方式,poll和epoll相对于select而言,只能在Linux下使用,但是select是跨平台的。同时poll相对于select而言,没有最大监听数量的限制。但是也是监管一系列的文件描述符,阻塞的去轮询看这些文件描述符是否可读/可写/异常,再去调用io函数读写。 但是select和poll都存在一个很大的“缺点”,当存在大量的连接且其中绝大部分的连接都是活跃的时候,那么poll/select的效率实际上是很低下的,这也是由于二者的…

2021年10月30日 0条评论 941点热度 0人点赞 ycq 阅读全文
socket

socket的粘包以及拆包的解决办法

粘包与半包是什么 粘包:顾名思义,就是原本属于两个包的消息被合并在一起了 半包:字面意思,原本是一个包内的消息被拆分成为两个包 为什么会有粘包与半包 出现粘包和半包的首要原因就是TCP是以数据流在网络当中传输的,而“流”是没有明显的收尾区别的,因此在接收的时候也无法区分哪里是数据包的头哪里是尾。 - 粘包产生的两种原因: 1. 每次发送方发送的数据小于socket缓冲区的大小,频繁的发送会被TCP优化算法合并成一个包 2. 接收端接收不及时,使得下一次接收到的包还是上一次遗留的 - 半包产生的两种原因: 1. 发送…

2021年3月17日 0条评论 1434点热度 1人点赞 ycq 阅读全文

COPYRIGHT © 2021 oo2ee.com. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS