`

线程与异步的应用

 
阅读更多

 

  1. 一般会涉及的关键词:同步Invoke(delegate),InvokeRequired(InvokeRequired的职责是判断当前运行的线程是不是与窗体主线程是同一个线程。),异步IAsyncResult=delegate.beginInvoke(,,AsyncCallback(回调方法),),IsCompleted,
  2. 线程是系统资源调度的基本单元,一个进程至少有一个线程。
  3. 线程的同步是指对某一个资源共享时,该资源就被锁住了,某时间内只能为某一线程使用,其他线程只能等待。异步则可以在新开的线程中继续执行操作。
  4. 多线程同步中使用Lock:lock的作用是在多线程中才有存在价值,lock住的某段代码只有当前进入的线程执行完后才能给其他线程进入,lock的对象可以是任何引用类型的对象。像是atm取钱就可以作为线程同步的例子,当在取钱时lock住的话,就可以确保该账户的信息不会被其他用户更改。
  5. 多线程的异步调用中使用的BeginInvoke:在BeginInvoke的传人参数中有一个AsyncCallback,该AsyncCallback的参数是回调的方法名,执行Test.beginInvoke(Test是一个delegate)首先是先执行delegate委托方法,执行完成后,就会进入回调的方法,传人回调方法的参数是IAsyncResult,他是AsyncResult的一个实例,所以拿到这个IAsyncResult后要强制转化为AsyncResult类型,在AsyncResult对象中有一个AsyncDelegate的属性,能把他强制转化为之前那个delegate(就是Test)的对象,拿到转化后的test的对象后,才可以执行test.EndInvoke,从而拿到Test这个delegate的委托方法的运算结果。
  6. 异步是目的,多线程是实习这个目的方法;多线程和异步都能起到解除阻塞的目的,提高软件的可响应性。异步用到的就是多线程的技术,比如delegate的begininvoke就是是用了新的线程。但不能说异步就是多线程,用消息机制也可以实现异步;多线程能制造异步的效果,但不能说多线程就是异步。在写异步的代码时比如begininvoke,内部的机制用到的其实就是.net封装好的多线程技术。
  7. 实现异步的方式有很多,比如常见的创建一个后台线程,将任务委托给这个线程执行,但这种类型的异步并不是所有的都是高效的。创建高可伸缩性的应用的秘诀就是创建更少的线程干更多的活儿,我们目标是没有阻塞。要达到这一点在做一个应用之前我们应该先问自己:我的应用是计算密集型的还是IO密集型的。

    对于计算密集型,CPU是主要资源。那什么类型的应用是计算密集型的,比如解方程,排序,压缩,图形图像处理等。对于这类应用无论怎样你都必须占用CPU时间,所以你可以通过创建后台线程的方式来实现异步。

    对于IO密集型,IO是主要瓶颈。IO不仅仅是我们常说的读取磁盘文件,像数据库操作、FTP、HTTP等一切网络通信,磁盘访问等都属于IO。当我们进行IO操作时,我们实际上是不需要占用CPU的,比如磁盘访问,一般现代的磁盘驱动器都有自己的控制系统,它自己能够控制寻道等,就相当于磁盘自己有一个小CPU在工作,而我们机器的CPU这个时候就可以解放出来(不用等待,可以干其他的活儿),是不占用的。那么这个时候如果我们能使用异步IO(发起异步IO然后立即返回,当异步IO执行完毕后会通知你)将会对我们的应用的效率带来革命性的影响,因为IO相对于CPU来说是非常非常非常慢速的设备,我们甚至只需要很少的线程就可以处理很多的任务。

  8. 1
  9. 1
  10. 1
  11. 1
  12. 1
  13. 1
  14. 1
  15. 1
  16. 1
  17. 1
  18. 1
  19. 1
  20. 1
  21. 1
分享到:
评论

相关推荐

    Java多线程实现异步调用实例

    在Java编程中,多线程和异步调用是提高应用程序性能和响应能力的重要手段。在本实例中,我们将深入探讨如何使用Java实现多线程以实现异步调用,并理解其背后的机制。 首先,多线程允许一个程序同时执行多个任务。在...

    C#多线程与异步的区别

    随着现代计算机技术的发展,特别是多核处理器的广泛应用,多线程与异步操作成为提高应用程序性能的关键手段。本文将深入探讨C#中的多线程与异步操作,旨在帮助开发者更好地理解这两种并发机制的区别及其应用场景。 ...

    c#线程同步与异步编程

    总的来说,理解并掌握C#中的线程同步与异步编程对于开发高效、响应性的应用程序至关重要。通过实践和不断学习,开发者可以更好地利用这些工具来解决并发和性能问题。在深入学习过程中,还可以研究`async`和`await`的...

    线程异步工作,当一个线程结束时异步通知另一线程

    总之,线程异步工作和线程间的异步通知是多线程编程中的重要概念,通过合理使用C++11及更高版本提供的并发工具,可以构建高效且响应迅速的多线程应用程序。正确理解和运用这些工具,能够帮助开发者优化系统性能,...

    CVI学习文件-多线程 异步定时器(修改增加学习版)

    在计算机编程领域,多线程和异步定时器是两个重要的概念,特别是在开发高效、响应迅速的应用程序时。本CVI(Cooperative Vision Interface)学习文件着重探讨了如何在CVI环境中利用多线程和异步定时器来优化程序性能...

    c# 多线程 异步进度条

    - 这可能是一个自定义的UI窗口,专门用于显示多线程异步任务的进度。它可能包含一个进度条控件和相关状态信息,如任务名称、已完成百分比等。 - 在`ProgressWindow`中,通常会有一个后台线程负责执行任务,同时...

    socket通信示例代码(线程、异步)

    在IT领域,网络通信是不可或缺的一部分,而Socket编程则是实现这一目标的...通过学习这个"socket通信示例代码(线程、异步)",你可以深入理解TCP/IP连接的建立与维护,以及如何利用线程和异步机制来优化服务器性能。

    异步和多线程socket通讯

    它们展示了如何在实际项目中应用多线程和异步socket,帮助开发者了解设计模式、错误处理和性能优化等方面的细节。例如,可以研究基于事件驱动的服务器如Node.js中的socket.io,或者查看使用Java NIO实现的高性能...

    Labview2015多线程异步调用工程

    在“Labview2015多线程异步调用工程”中,我们探讨的核心是利用多线程和异步调用来提高程序执行效率和并发能力。这个工程的目的是让主线程能持续快速地进行轮询,同时多个子线程可以并行处理耗时的任务,从而优化...

    concurrentunit, 用于测试多线程和异步应用程序的工具包.zip

    concurrentunit, 用于测试多线程和异步应用程序的工具包 ConcurrentUnit 一个简单的。零依赖的测试多线程。 支持 Java 1.6 。简介创建ConcurrentUnit是为了帮助开发人员测试多线程或者异步代码。 它允许你在任何线程...

    线程与异步调用

    对于初学者或者希望深入理解的人来说,掌握进程、线程以及异步调用的相关知识是非常重要的。这不仅有助于编写出更加高效和响应性更好的程序,还能在多线程和并发编程时,更好地理解和处理同步问题、死锁以及竞态条件...

    C#多线程异步源码示例

    通过深入研究这些示例,开发者可以更好地理解如何在实际项目中应用C#的多线程异步技术,提高代码的性能和可维护性。记住,正确使用多线程和异步编程能显著提升应用程序的效率,但同时也需要注意潜在的并发问题,确保...

    简洁实用的C#多线程异步实例

    本文将深入探讨C#中的多线程异步实例,并以提供的"简洁实用的C#多线程异步实例"(AsynchUI)为切入点,帮助初学者更好地理解和应用这些概念。 首先,让我们了解什么是多线程。多线程是指在一个进程中同时执行多个...

    多线程 异步 加载进度条

    在编程领域,多线程和异步操作是提高应用程序性能和用户体验的重要技术。...通过学习和实践这样的示例,开发者可以更好地理解和掌握多线程与异步编程的核心概念,这对于提升软件性能和用户体验至关重要。

    使用Python中的DrissionPage结合多线程与异步下载某书图片

    在探讨使用Python中的DrissionPage结合多线程与异步下载某书图片时,我们首先需要了解几个核心概念和工具:Python、DrissionPage、多线程技术和异步编程。Python是一种广泛应用于各种编程任务的高级编程语言,以其...

    进程线程通信,线程同步,异步,进程通信经典进程间通信.7z

    在计算机科学中,进程线程通信、线程同步与异步以及进程间的通信是操作系统核心概念,对于理解和优化多任务并行处理至关重要。这些概念在软件开发,尤其是并发编程领域中占据着举足轻重的地位。 首先,让我们来探讨...

    C# 多线程异步执行

    在多线程异步场景中,我们可以定义一个事件,当某个异步操作完成时触发这个事件,通知调用者任务已完成。 结合这些概念,我们可以构建一个模拟多线程下载图片的程序。以下是一个基本步骤: 1. **创建事件**:定义...

    L6多线程&异步编程

    总结起来,"L6多线程&异步编程"的学习资源覆盖了多线程的创建与管理、线程间的通信和同步,以及异步编程的概念与应用。通过这些材料,开发者可以提升其在并发编程领域的技能,为构建高效、响应迅速的应用程序打下...

    异步多线程Demo

    10. **学习资源**:“异步多线程Demo”可能包含了具体的代码示例,用于演示如何在实际项目中应用多线程和异步编程。学习这些示例可以帮助你理解如何在实践中解决并发问题,提高代码的运行效率。 通过深入学习和实践...

    多线程异步调用(并参递参数)

    本文将深入探讨“多线程异步调用(并参递参数)”这一主题,通过经典代码示例来解释其原理和应用。 首先,我们要理解多线程的概念。在单线程环境中,程序执行是顺序的,一次只能做一件事。而在多线程环境中,程序...

Global site tag (gtag.js) - Google Analytics