首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java -线程优先和套接字

Java -线程优先和套接字
EN

Stack Overflow用户
提问于 2015-02-12 23:37:07
回答 1查看 311关注 0票数 0

我正在开发一个网络爬虫。程序的每个线程尝试读取3主机/秒(330 of连接和读取超时)。每个线程的优先级为10 (Ubuntu12.04)。

当我设置10个线程时,爬虫将返回150个活动主机(主机没有超时)。

当我设置400个线程时,爬虫只返回20个活着的主机。我不知道到底有多少个主机还活着或存在。

我的问题是,线程是否有可能在短时间内没有执行,并且当它确实需要时间继续(从CPU调度)套接字到已经超时?(因为线程处理请求花费的时间太长)。

如果是这样的话,我需要设置多少线程,所以所有线程都有相同的时间?

我使用的是一个ubuntu12.04 x64 -桌面,4GB内存,CPU i5

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-12 23:53:32

感觉好像你需要对Amdahl定律有一个了解。基本上,对于N个线程,您的操作将比N倍的加速要少得多。您只有一个i5,它可以同时支持2到4个并行任务。抛出比您的系统更多的线程实际上可以处理瓶颈性能下降,因为旋转线程、在线程之间切换以及(如果您没有使用调度程序或线程池)破坏线程的成本。

您也不能保证相同的执行时间,因为您依赖于外部因素,如打开到该服务器的套接字,以及服务器自身的连接速度。会有比其他服务器慢的服务器,这意味着线程从套接字读取的总时间将比其他线程慢。

我不能肯定地说,您的性能正因为IO的推测而陷入困境,但我建议您进行分析和测试。在您的系统上设置尽可能多的线程,并在那里工作。尽可能最好地分析您的代码。向它扔更多的线程不是个好主意。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28489969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档