当前位置: 首页 > news >正文

高性能网络框架笔记

目录

  • TCP粘包、分包
  • 惊群
  • 断开连接,TCP怎么检测的?
  • 大量的close wait,如何解 ?
  • 双方同时调用close
  • 水平触发和边沿触发的区别

TCP粘包、分包

解决:1.应用层协议头前面pktlen;2.为每一个包加上分隔符;(\r\n)

惊群

解决:多个线程共享一个共性内存,里面存有锁,谁得锁谁去响应。

断开连接,TCP怎么检测的?

1、网线断了,网卡会重启。(应用层检测出来)
2、路由器断电,设计 —> 心跳包
3、客户端直接宕机。-------->心跳包

大量的close wait,如何解 ?

ret=recv(),
ret=0时,此时会清理tcp相关的信息之后,才会调用close。(因此会存在大量的close_wait)
解决:把业务层和网络层数据分离,可以直接调用close。

双方同时调用close

哪些情景会出现:

水平触发和边沿触发的区别

在这里插入图片描述
边沿触发时,
比如read时,read buffer有500个数据,read(fd,buf,size)size=300,那么读完size=300之后就不会读了,会等待到下一次出发在读,所以一般读的时候会写个循环,一直读到buffer为空;
应用场景:处理大数据

水平触发时,
只要文件描述符关联的读内核缓冲区read buffer非空,有数据可以读取,就一直发出可读信号进行通知,

水平触发可以在业务逻辑上只调用一次recv,边沿触发需要用循环来recv。
水平触发可以使用阻塞模式,边沿模式不能。
两者性能差异非常小,一般小数据使用水平触发LT,大数据使用边沿触发ET。
listen fd最好使用水平触发,尽量不要边沿触发。

http://www.lryc.cn/news/108322.html

相关文章:

  • leetcode 738. 单调递增的数字
  • FPGA项目设计:数字时钟
  • 科技云报道:向量数据库:AI时代的下一个热点
  • 【更新】119所院校考研重点勾画更新预告!
  • 【Leetcode】(自食用)LRU算法(哈希链表法)
  • robots.txt 如何禁止蜘蛛(百度,360,搜狗,谷歌)搜索引擎获取页面内容
  • JVM 学习—— 类加载机制
  • C#实现int类型和字节流的相互在转化
  • Centos设置固定IP地址,外网访问
  • 非线性弹簧摆的仿真(Matlab代码实现)
  • css实现文字颜色渐变+阴影
  • C++学习笔记总结练习:关联容器
  • TypeScript技能总结(二)
  • 整理一些Postgresql工作中常用面试中会问的问题---Postgresql面试题001
  • Xposed回发android.os.NetworkOnMainThreadException修复
  • 【Leetcode】二叉树的最近公共祖先,二叉搜索树转换成排好序的双向链表,前序遍历与中序遍历构造二叉树
  • 途乐证券|互联金融概念爆发,安硕信息“20cm”涨停,高伟达等大涨
  • 计数排序算法
  • 企业高性能web服务器-nginx
  • GaussDB数据库的元数据及其管理简介
  • 合并两个有序链表 LeetCode热题100
  • 【C++】模拟实现string
  • AI智慧安监视频监控汇聚平台EasyCVR调用接口出现跨域现象该如何解决?
  • 无人机机巢有哪些,无人机机场/机场的主要分类
  • 联想存储 HH0305_DE4000H 划分卷组、卷、主机
  • 【Python机器学习】实验08 决策树
  • MySQL的innoDB存储引擎如何解决幻读的问题?
  • Web3.0:重新定义互联网的未来
  • 2023年还能选择前端吗?
  • sheetJs / xlsx-js-style 纯前端实现导出 excel 表格及自定义单元格样式