connectex: Only one usage of each socket address (protocol/network address/port) is normally permitt

博客探讨了在处理大文本数据时遇到的并发问题,详细描述了如何通过降低并发量和优化内存管理提高程序效率。通过实验发现,即使CPU满载,内存管理不当仍会导致'Only one usage of each socket address'错误。作者建议平衡并发与内存使用,避免一味增加并发量,并提出控制数据流入和流出的策略。
摘要由CSDN通过智能技术生成

处理一个大文本数据,读取到内存,用多线程并发执行,存入数据库。经多次调试,在程序运行一段时间后间歇性报错——

connectex: Only one usage of each socket address (protocol/network address/port) is normally permitt

并发量也从10000逐步减少到80,chan的容量也从10000000减少到300,同时打开任务管理器,观察,当协程开到10000或者80,并没有多大的区别,使用率都是100%。这是个人电脑,i7-8。所以对于这样的配置,并发开的很大也没有太多的意义,CPU的处理速度是相对稳定的区间,已经使用100%了,开10000个相互等待,和80个相互等待没什么区别,反而我测试,并发开10000时,每秒存入数据库数据的条数保持在2000左右,而开80,每秒可达9000多!效率4倍!同时对内存进行检测,原来内存开的很大,内存使用率也100%,这时候就会报错了!CPU使用率100%是不会出问题的,我连续跑了2个多小时满载都没问题,内存不行,这个是要控制的,我开始测试写入内存的速度,从休眠0.1秒、0.01秒,1纳秒,0.001纳秒……到最后0.1纳秒。这其实就像一个水池,开启一个协程不停的读取大数据文本,把整理的数据流向水池,然后开辟N协程抽取水池里面被整理的数据,当这N多协程的抽水速度低于防水速度时!这时候就会报Only one usage of

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值