• 异步 多线程 线程池


    线程池:IIS维护一个线程池,当请求抵达,会从池中获取一个空闲线程处理他,处理完毕后,线程不会回收,而是重新释放到池中。但线程池有最大容量,当超过容量时,新的请求会被放到一个请求队列中等待被释放线程。(ThreadPool)

    线程:处理http请求的线程。(Thread)

    线程池的好处:

    1.频繁的创建释放线程,极大损害性能,线程池机制使线程得到了最大的复用,提高服务器吞吐能力。

    2.线程池的最大容量限制,避免了在高并发情况下因为线程的无限创建而导致服务器崩溃。

    何时采用异步:

    异步操作主要用来处理耗时处理,主要用于I/O操作:文件I/O,网络I/O;文件是指对文件读写,网络是指请求数据库,或者远程服务调用。

    异步技术: Asny await

    asny 后面必须是Task,Task<>,void;声明是异步模式。

    await:等待该异步模式执行完毕后,才继续执行下一条语句。

    public class AsyncClass
        {
            public void Main()
            {
                Console.WriteLine(string.Format("main threadid is {0}", Thread.CurrentThread.ManagedThreadId));
                var result= Test().Result;
                Console.WriteLine(result);
                Console.ReadKey();
            }
    
           public async Task<string> Test()
            {
                // 方法打上async关键字,就可以用await调用同样打上async的方法  
                // await 后面的方法将在另外一个线程中执行  
               var name1 = GetName1();
               var name2 = GetName2();
               return string.Format("1:{0} ,2:{1}", await name1, await name2);
            }
    
            public async Task<string> GetName1()
            {
                Console.WriteLine("GetName1 Start!");
                await Task.Delay(4000);
                Console.WriteLine("GetName1 End!");
                return "GetName1";
            }
    
            public async Task<string> GetName2()
            {
                Console.WriteLine("GetName2 Start");
                await Task.Delay(6000);
                Console.WriteLine("GetName2 End!");
                return "GetName2";
            }
        }
    

      

  • 相关阅读:
    吐血巨献:VB网络编程(webbrowser+Inet+抓包封包+经验)
    亦思验证码识别系统3.1详解
    开机自动连接宽带程序
    轻松报选修智能报选修程序(适用于正方教学管理系统)
    低调发布一个百度谷歌关键字搜索工具
    解惑:Postmessage函数模拟鼠标单击指定坐标
    分享一些经典资源
    英文单词缩写查询
    css控制的个性导航栏
    导航栏中加入自动弹出下拉菜单
  • 原文地址:https://www.cnblogs.com/housh/p/4959554.html
Copyright © 2020-2023  润新知