gpt4 book ai didi

Java - 线程优先级和套接字

转载 作者:行者123 更新时间:2023-12-02 04:58:54 25 4
gpt4 key购买 nike

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

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

当我设置 400 个线程时,爬虫仅返回 20 个 Activity 主机。我不知道有多少主机真正活着或存在。

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

如果是这种情况,我必须设置多少个线程,以便所有线程都有相同的时间?

我使用的是 ubuntu 12.04 x64 - 台式机、4GB RAM、CPU i5

最佳答案

感觉你需要了解 Amdahl's Law 。基本上,对于 N 个线程,您的操作速度将[大大]低于 N 倍。您只有一个 i5,它可以同时支持 2 到 4 个并行任务。由于旋转线程、在线程之间切换以及(如果您不使用调度程序或线程池)销毁线程的成本,向其抛出的线程数量超出了系统真正可以处理的沼泽性能下降的程度。

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

我不能肯定地说您的性能是否如推测的那样因 IO 而下降,但我建议进行分析和测试。在系统上设置尽可能多的线程,并从那里开始工作。尽可能最好地分析您的代码。向其投入更多线程不是是一个好主意。

关于Java - 线程优先级和套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28489969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com