• [2014-9-10]异步编程


    异步编程

    启用一个应用程序,系统在内存中创建一个新的进程,进程是一组资源,包括虚拟地址控件,文件句柄和程序启动所需要其他载体。

    进程中创建一个线程内核对象,线程体现了程序的真实执行情况。

    默认情况下,一个进程包括一个线程,从程序的开始一直到程序的结束。

    线程池(thread pool)

    刚开始,进程的线程池为空,进程使用的线程被创建,并且完成了线程的执行,它不会销毁,而是加入到进程的线程池中。如果进程需要另外一个线程,CLR会从池中还原一个线程,节省时间。

    异步编程模式

    1.等待-直到完成,原始线程中断并等异步方法完成在继续

    2.轮询,原始线程定期检查发起线程是否完成,如没有,可继续做其他。

    3.回调

    BeginInvoke从线程池中获取一个线程并在新的线程开始时运行引用方法。返回给调用线程一个实现IAsyncResult接口的对象,这个接口引用包含了

    异步方法当前状态,原始线程可继续执行。

    EndInvoke 获取由异步方法调用返回的值,并释放线程使用的资源。接受一个由BeginInvoke返回的IAsyncResult对象的引用,找到关联线程

    等待-直到结束模式

    原始线程发起一个异步方法的调用,做一些其他处理,然后停止并等待,直到开启线程结束。

    IAsyncResult isa = del.BeginInvoke(3,5,null,null)

    long result = del.EndInvoke(iar)

    轮询模式

    原始线程发起异步方法的调用,然后使用IAsyncResult对象的IsComplete属性定期检查开启的线程是否完成,如果异步方法已经完成,原始线程调用EndInvoke.

    回调模式

    等待直到结束模式和轮询模式中,初始线程继续自己的流程,知道它开启的线程完成。

    回调模式不同在于,一旦初始线程发起异步方法,它就自己管自己,不再考虑同步,当异步方法结束,系统调用一个用户自定义方法来处理结果,并调用委托的EndInvoke方法

    这个用户自定义的方法叫做回调方法

     void AsyncCallBack(ISyncResult iar)

    IAsyncResult iar1=(del.BeginInvoke(3,5,new AsyncResult(),null))

  • 相关阅读:
    laravel实践2.引入bootstrap
    laravel实践3.laravel Mix使用
    利用nginx 反向代理解决跨域问题
    前端压缩图片记录一下
    蒲文强java第 七 次作业
    蒲文强java第六次作业
    192403蒲文强——面向对象第五次作业
    浅析学习关于《现代软件工程——构建之法》第一章的总结
    第四次作业----两人结对编程
    第四次博客作业-结对项目
  • 原文地址:https://www.cnblogs.com/wuyuetian/p/3965120.html
Copyright © 2020-2023  润新知