• 异步的基础知识


    基本概念

    进程:Windows系统采用抢先式多任务,每个运行的程序都分配在一个独立的进程中Process,进程就是描述运行程序所需要的资源信息(如内存或堆栈的使用情况)。
    线程:线程位于进程下,用于描述程序执行状态的一种结构(所以线程可以在CPU上切换运行)。
    多线程开发:通常一个进程中默认有一个主线程,但是如果一个操作延时就无法进行其它操作。多线程可是两个线程交替在CPU上处理,还有根据线程的用途可分为:IO线程和计算线程,IO线程:仅仅在任务开始和结束时需要CPU;计算线程使用CPU密度较高。所以开发中主要考虑将IO线程闲置的CPU交由其他线程提供CPU利用率。

    .Net中的线程

    .Net中通过System.Threading命名空间下的类托管线程,线程是种昂贵的资源引入线程池管理。线程表示代码的执行,主要以委托Delegate类型参数供线程运行,系统提供的委托有:

    名称 作用
    ThreadStart 没有参数的线程入口方法
    ParameterizedThreadStart 带参数的线程入口方法
    TimeerCallback 定时执行带参数的线程入口方法(有线程池管理线程)

    异步模式

    APM异步模式

    对于IO线程,通过BeginXXX和EedXXX一对方法执行

    1. 启动线程后,主线程结束
    2. 第二步不需要CPU参与
    3. 开启线程执行第三部

    EPM基于事件的多线程

    后缀为AsyncCompleted的方法,WinForm 提供的控件管理

    Task 异步

    前面两种异步是.Net较早的版本,缺点:异步模式难以理解(将程序逻辑切割乱);第三部不能回到主线程,不能访问线程中数据。基于任务的解决了以上问题,在结合asyncawait关键字,使异步编程更简单

            public async Task SteramRead(string filename)
            {
                using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true))
                {
                    byte[] buff = new byte[file.Length];
                    await file.ReadAsync(buff, 0, (int)file.Length);
                }
            }
    

    方法执行到await将上面当前线程结束,开启新的线程执行文件读取,当读取完返回执行方法的位置(且线程为第一步线程)

    asp.net 中的异步

    asp.net服务每接到一个请求,HttpRuntime将从HttpApplication线程池中获取一个对象。
    异步的需求:但是线程池中的线程是由一定数量的,当大量用户访问是会造成线程池中没有空余线程处理用户请求。
    一般解决: 在Ihandler中对于网络请求、数据库查询、文件操作开启异步,则线程会将HttpApplication用的线程先返回到线程池供新的请求使用,异步结束在调取线程响应。

  • 相关阅读:
    数组方法之find
    检查数组中是否有NaN
    数组方法之includes
    数组方法之lastIndexOf
    数组方法之indexOf
    数组方法之forEach
    col-md-push-*和col-md-offset的区别
    35个jQuery小技巧!
    35个jQuery小技巧!
    VS 2013插件
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/9114682.html
Copyright © 2020-2023  润新知