首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#并发编程实例讲解-概述(01)

C#并发编程实例讲解-概述(01)

作者头像
牛嗷嗷
发布2018-03-30 10:34:25
7770
发布2018-03-30 10:34:25
举报
文章被收录于专栏:微服务微服务

在工作中经常遇到需要并发编程的实例,一直没有时间来整理,现在空了下来,个人整理对并发一下理解。

关于并发编程的几个误解
  • 误解一:并发编程就是多线程 实际上多线只是并发编程的一中形式,在C#中还有很多更实用、更方便的并发编程技术,包括异步编程、并行编程、TPL数据流、响应式编程等。
  • 误解二:只有大型服务器程序才需要考虑并发 服务器端的大型程序要响应大量客户端的数据请求,当然要充分考虑并发。但是桌面程序和手机、平板等移动端应用同样需要考虑并发编程,因为它们是直接面向最终用户的,而现在用户对使用体验的要求越来越高。程序必须能随时响应用户的操作,尤其是在后台处理时(读写数据、与服务器通信等),这正是并发编程的目的之一。
  • 误解三:并发编程很复杂、必须掌握很多底层技术     C# 和 .NET 提供了很多程序库,并发编程已经变得简单多了。尤其是 .NET 4.5 推出了全新的 async 和 await 关键字,使并发编程的代码减少到了最低限度。
并发

    最简单明了的解释:同时做多件事情,这个解释表明了并发的作用,服务器应用利用并发就,在处理第一个请求的同时响应第二个请求。只要你希望程序能同时做多件事情,你就需要并发。所以几乎每个软件程序都会受益于并发。

多线程

    很多人看到并发 就会想到多线程 ,这里解释一下,多线程它只是并发的一种形式,它采用多个线程来执行程序,其中分为主线程和子线程之分。执行程序的第一句话就会开启一个主线程,主线程可以创建子线程来实现并发。多线程是并发的一种形式,但不是唯一的形式。实际上,直接使用底层线程类型在现代程序基本不起作用。比起老式多线程,采用高级抽象机制会让功能更加强大。效率更高。这里也就是不会再使用Thread或BackgroundWorker。比如你的代码输入new Thead(),说明项目中的代码过时了。但是,不要认为多线程已经彻底被淘汰了!因为线程池要求多线程继续存在。线程池存放任务的队列,这个队列能够根据需要自行调整。相应地,线程池产生了另一个重要的并发形式:并行处理

并行处理

    把正在执行的大量的任务分割成小块,分配给多个同时运行的线程。为了让处理器的利用效率最大化,并行处理(或并行编程)采用多线程。当现代多核 CPU执行大量任务时,若只用一个核执行所有任务,而其他核保持空闲,这显然是不合理的。并行处理把任务分割成小块并分配给多个线程,让它们在不同的核上独立运行。并行处理是多线程的一种,而多线程是并发的一种。在现代程序中,还有一种非常重要但很多人还不熟悉的并发类型:异步编程

异步编程

    并发的一种形式,和多线程同级,它一般采用回调(callback)机制,以避免产生不必要的线程。  在.NET中,新版有Task和Task.以前一般是回调或事件event.异步编程的核心理念是异步操作:启动了的操作将会在一段时间后完成。这个操作正在执行时,不会阻塞原来的线程。启动了这个操作的线程,可以继续执行其他任务。当操作完成时,会通知他的回调函数,以便让程序知道操作已经结束NET4.5已经支持async和await,让异步变得和同步编程一样容易。await关键字的作用:启动一个将会被执行的Task(该Task将会在新线程中执行),并立即返回,所以await所在的函数不会被阻塞。当Task完成后,继续执行await关键字后面的代码

响应式编程

    一种声明式的编程模式,程序在该模式中对事件做出响应。如果把一个程序看作一个大型的状态机,则该程序的行为便可视为它对一系列事件做出响应,即每换一个事件,它就更新一次自己的状态。这听起来很抽象和空洞,但实际上并非如此。利用现代的程序框架,响应式编程已经在实际开发中广泛使用。响应式编程不一定是并发的,但它与并发编程联系紧密。      通常情况下,一个并发程序要使用多种技术。大多数程序至少使用了多线程(通过线程池)和异步编程。要大胆地把各种并发编程形式进行混合和匹配,在程序的各个部分使用合适的工具。

本文版权归作者共有,欢迎转载,须保留此段声明,并给出原文链接,谢谢!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于并发编程的几个误解
  • 并发
  • 多线程
  • 并行处理
  • 异步编程
  • 响应式编程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档