zoukankan      html  css  js  c++  java
  • 异步!=多线程

    最近看项目中异步控制器的一些代码,发现新东西出来后,不管理不理解都到处乱用的现象还真是不少。

      public async Task<ActionResult> Testasync(string url)
            {
                WebRequest request = WebRequest.Create("http://kb.cnblogs.com/page/116095/");
                string s = Thread.CurrentThread.ManagedThreadId.ToString();
                s += "|";
                WebResponse respont = await request.GetResponseAsync();
                s += Thread.CurrentThread.ManagedThreadId.ToString();
                return Content(s);
            }

    线程的个数是有限的,异步是交还出线程,利用硬件的DMA完成io处理或者网络处理请求。

    当需要执行I/O操作时,使用异步操作比使用线程+同步I/O操作更合适。I/O操作不仅包括了直接的文件、网络的读写,还包括数据库操作、Web Service、HttpRequest以及.Net Remoting等跨进程的调用。
      而线程的适用范围则是那种需要长时间CPU运算的场合,例如耗时较长的图形处理和算法执行。但是往往由于使用线程编程的简单和符合习惯,所以很多朋友往往会使用线程来执行耗时较长的I/O操作。这样在只有少数几个并发操作的时候还无伤大雅,如果需要处理大量的并发操作时就不合适了。

  • 相关阅读:
    bzoj 1017 魔兽地图DotR
    poj 1322 chocolate
    bzoj 1045 糖果传递
    poj 3067 japan
    timus 1109 Conference(二分图匹配)
    URAL 1205 By the Underground or by Foot?(SPFA)
    URAL 1242 Werewolf(DFS)
    timus 1033 Labyrinth(BFS)
    URAL 1208 Legendary Teams Contest(DFS)
    URAL 1930 Ivan's Car(BFS)
  • 原文地址:https://www.cnblogs.com/smailxiaobai/p/5720777.html
Copyright © 2011-2022 走看看