我写了一个程序,它产生一个用户选择的线程数,每个线程都在互联网上爬行以搜索一些数据,你可以称之为网络爬虫。
程序的瓶颈绝对应该是网络容量,因为任何给定的线程都会花费大部分时间等待网络请求:
WebClient client = new WebClient();
string url = "http://averynice.web.api?x=2d2d2&?y=dwdwdw";
string response = client.DownloadString(url)
我遇到的问题是,如果我让它产生大约 20 个线程,该程序将达到它的峰值速度(就它已处理的网页数量而言),该速度约为每分钟 1,000 页。比这更多的线程和它的速度与我添加的线程数呈负相关。
另一方面,如果我启动 10 甚至 20 个单独的程序实例并在每个实例中生成 20 个线程,则程序的所有实例将达到相同的最高速度,从而导致每分钟 1000 的累积速度 * 运行的程序实例数.
我在stackoverflow上读到:
进程和线程都是独立的执行序列。典型的区别是(同一进程的)线程在共享内存空间中运行,而进程在不同的内存空间中运行。
所以我认为问题出在共享内存空间的大小上,但是我该如何改变它,以便我可以让一个实例运行与我的网络容量一样多的线程呢?
如果问题不是共享内存空间,那么限制因素/瓶颈是什么,我该如何解决?
提前感谢您的任何帮助或建议:)。