zoukankan      html  css  js  c++  java
  • 多线程实际运用<第七篇>

    1、单线程采集100个页面

        class Program
        {
            static int i = 6991275;
            static void Main(string[] args)
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                getTitle();
                sw.Stop();
                Console.WriteLine("采集100个页面完成,用时:" + sw.ElapsedMilliseconds + "毫秒");
    
                Console.ReadKey();
            }
    
            static void getTitle()
            {
                for (int j = 0; j < 100; j++)
                {
                    WebClient wc = new WebClient();
                    wc.BaseAddress = "http://www.juedui100.com/";
                    wc.Encoding = Encoding.UTF8;
                    string html = wc.DownloadString("user/" + ++i + ".html");
                    Regex reg = new Regex(@"<title>(.*)</title>");
                    Console.WriteLine(reg.Match(html));
                }
            }
        }

      输出:

      

    2、多线程采集100个页面

        class Program
        {
            static int i = 6991275;
            static volatile int k = 1;
            static void Main(string[] args)
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                for (int i = 0; i < 5; i++)
                {
                    ThreadPool.QueueUserWorkItem(getTitle);
                }
                while (true)
                {
                    if (k == 5)
                    {
                        sw.Stop();
                        break;
                    }
                }
                Console.WriteLine("采集100个页面完成,用时:" + sw.ElapsedMilliseconds + "毫秒");
                Console.ReadKey();
            }
    
            static void getTitle(object o)
            {
                while(i < 6991375)
                {
                    WebClient wc = new WebClient();
                    wc.BaseAddress = "http://www.juedui100.com/";
                    wc.Encoding = Encoding.UTF8;
                    string html = wc.DownloadString("user/" + Interlocked.Increment(ref i) + ".html");
                    Regex reg = new Regex(@"<title>(.*)</title>");
                    Console.WriteLine(reg.Match(html));
                }
                k++;
            }
        }

      输出如下:

      

      单纯从执行时间来看,采集100个页面,用5个线程效率提升2倍多,当然这跟带宽也有关系啦。

      有问题,好像K++多个线程执行的时候有问题,也要Interlocked.Increment。以后再改、

  • 相关阅读:
    Java Native Method
    SQL语句优化
    Ibatis的环境搭建以及遇到的问题解决
    Java 构建器
    SpringMVC自定义视图 Excel视图和PDF视图
    java 枚举的常见使用方法
    mysql 根据某些字段之和排序
    MFC The Screen Flickers When The Image Zoomed
    How To Debug Qmake Pro File
    Gcc And MakeFile Level1
  • 原文地址:https://www.cnblogs.com/kissdodog/p/3447774.html
Copyright © 2011-2022 走看看