关于UDP丢包的检测
背景描述 :
下载一个文件, 用TCP请求数据, 用UDP接收数据.
数据的请求和接收分别在两个线程里. 每次TCP请求16K数据, UDP每次回复1K数据.
整个16K下载完毕, 将16K数据一次性写入文件.
有这么几个任务集 :
1. 正在下载的任务集A
2. 已经下载完成的任务集B
3. 空闲待用的任务集C
有这么几个线程 :
1. 写文件线程
2. 超时检测线程
3. 数据接收线程
4. 数据请求的发起线程
各个线程的工作描述 :
1. 数据请求发起线程, 从任务集C中获取空闲任务发起数据请求, 并将对应任务添加到任务集A中;
2. 写文件线程将获取任务集B中的任务, 将数据写入文件后, 释放对应任务到任务集C中;
3. 数据接收线程将数据写入到任务集A中的对应任务中, 整个任务写完之后将任务添加到任务集B中;
4. 超时检测线程定期检测任务集A中的任务超时情况, 如果发现任务超时则认定为丢包了, 会请求重传;
问题描述 :
1. UDP肯定是避免不了丢包的, 所以肯定也需要一个超吃重传的检测机制
2. 目前的处理办法是起一个线程的去检测丢包的情况, 丢包了则重传, 但问题是CPU占用太严重了
已经做过的尝试 :
1. 控制超时的时间, 我测试过了我的程序, 重复接收的数据微乎其微, 大概500MB的文件重复接收了也就那么十几KB. 说明超时时间的控制, 基本上算是合格了.
2. 在超时检测线程中增加超时检测间隔的时间, 但是CPU的占用还是超出了预期.
有没有什么更好的机制去解决UDP丢包检测这样的问题. 各位大虾们看看小弟的问题, 给个方法解决解决.