对于发送请求操作多线程无法提高性能为什么

qzyf1992 2014-09-12 03:53:12
我使用httpwebrequest向百度发送100个请求 使用多线程 线程池 异步编程均无法使得性能提升和单线程发100个请求所用时间一样为什么?百思不得其解。
...全文
328 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qzyf1992 2014-09-15
  • 打赏
  • 举报
回复
引用 8 楼 a407121393 的回复:
开什么玩笑,100个线程并发?你以为你pc是ibm小型机吗?并发设为5,肯定比单线程快
我承认不可能100个线程并发但是有2点至少应该可以提高性能。 1.线程数变多,操作系统会分配更多的资源给线程,可以提高cpu使用率。这个也确实实现了。 2.电脑双核处理器,线程可以映射到双核同时工作应该也可以提高性能
qzyf1992 2014-09-15
  • 打赏
  • 举报
回复

/// <summary>  
        /// 根据相传入的数据,得到相应页面数据,并对数据进行处理
        /// </summary>  
        /// <param name="item">参数类对象</param>  
        /// <returns>返回HttpResult类型</returns>  
        public void GetAsyncHtml(Item item, Action<string> action)
        {
            SetItem(item);
            HttpInformation information = new HttpInformation();
            {
                information.Action = action;
                information.Request = request;
            }
            IAsyncResult result = request.BeginGetResponse(new AsyncCallback(EndGetAsyncHtml), information);
        }
        public void EndGetAsyncHtml(IAsyncResult result)
        {
            HttpInformation information = (HttpInformation)result.AsyncState;
            HttpWebRequest request = information.Request;
            Action<string> action = information.Action;
            response = (HttpWebResponse)request.EndGetResponse(result);
            //获取服务器返回的资源  
            using (response = (HttpWebResponse)request.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default))
                {
                    string html = reader.ReadToEnd();
                    action(html);
                }
            }
        }

listBox1.Items.Clear();
            sw.Restart();
            HTMLHelper helper = new HTMLHelper();
            for (int i = 0; i < num; i++)
            {
                helper.GetAsyncHtml(new Item() { Url = "http://localhost:3333/hehe.aspx" }, d => AddList(d));
            }
            Thread th = new Thread(new ParameterizedThreadStart(ShowHtml));
            th.IsBackground = true;
            th.Start(num);
这是用线程池实现的
qzyf1992 2014-09-15
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
谁知道你怎样设计的流程? 写10行左右的(主)程序代码示例,看看你的具体写法。

   private void ThreadGet_Click(object sender, EventArgs e)
        {
            sw.Restart();
            listBox1.Items.Clear();
            List<Task> list = new List<Task>();
            for (int i = 0; i < num; i++)
            {
                Task temp = Task.Factory.StartNew(AddHtml);
                list.Add(temp);
            }
            Task.WaitAll(list.ToArray());
            sw.Stop();
            MessageBox.Show(sw.Elapsed.ToString());

        }
        public void AddHtml()
        {
            HTMLHelper helper = new HTMLHelper();
            helper.GetHtml(new Item() { Url = "http://localhost:3333/hehe.aspx"});
        }

 public string GetHtml(Item item)
        {
            string html = string.Empty;
            SetItem(item);
            //获取服务器返回的资源  
            using (response = (HttpWebResponse)request.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default))
                {
                     html = reader.ReadToEnd();
                }
            }
            if(request!=null)
            {
                request.Abort();
            }
            return html;

        }
qzyf1992 2014-09-15
  • 打赏
  • 举报
回复
我找到原因了

 protected void Page_Load(object sender, EventArgs e)
        {
            //跟这个粒度有关
            Thread.Sleep(100);
        }
pis5378kj 2014-09-15
  • 打赏
  • 举报
回复
可能是因为多线程一些特殊的地方吧。
饕餮123 2014-09-14
  • 打赏
  • 举报
回复
开什么玩笑,100个线程并发?你以为你pc是ibm小型机吗?并发设为5,肯定比单线程快
  • 打赏
  • 举报
回复
谁知道你怎样设计的流程? 写10行左右的(主)程序代码示例,看看你的具体写法。
qzyf1992 2014-09-13
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
如果你有多块网卡,并且能指定多网卡发送就能显著提高效率
请详解 跟网卡有什么关系
qzyf1992 2014-09-13
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
多线程带来的吞吐量不会无限增长。 另外你如果不恰当地过度地做线程同步,也会造成性能降低。
没有做线程同步就是一个并行发出去。 百度应该是并行处理我的请求吧。至少性能应该可以获得提高但是一点都没有甚至有时候慢了为什么。
  • 打赏
  • 举报
回复
帖代码看看,是不是你的多线程是顺序执行的。
xdashewan 2014-09-12
  • 打赏
  • 举报
回复
如果你有多块网卡,并且能指定多网卡发送就能显著提高效率
threenewbee 2014-09-12
  • 打赏
  • 举报
回复
多线程带来的吞吐量不会无限增长。 另外你如果不恰当地过度地做线程同步,也会造成性能降低。
qzyf1992 2014-09-12
  • 打赏
  • 举报
回复
如果说因为百度对同一ip进行了 排队处理或是其他怎么处理, 我又自己建了一个web应用程序。向自己建的web应用程序 做同样的操作。依然没有性能上的提升。cpu使用率倒是上去 了 所用的时间倒是没提高。web服务难道不是多线程处理我的请求?是排队处理么?

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧