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

关于并发编程的几个误解

  • 误解一:并发编程就是多线程 
    实际上多线只是并发编程的一中形式,在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关键字后面的代码

响应式编程

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

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

转载于:https://www.cnblogs.com/moyhui/p/8085332.html

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

  1. shell脚本编程 实例讲解

    shell脚本编程 实例讲解 1.键盘输入三个数字,按照从大到小的顺序输出! 排序题 a b c 2 10 9 a=2 b=10 v=9 第一步: 两两相互进行比较,比较三次 第二步:不论谁大谁小,最 ...

  2. Python并发编程实例教程

    有关Python中的并发编程实例,主要是对Threading模块的应用,文中自定义了一个Threading类库. 一.简介 我们将一个正在运行的程序称为进程.每个进程都有它自己的系统状态,包含内存状态 ...

  3. java 并发编程实例_Java并发编程案例解读

    经过前面几节的学习,了解了多线程概念.Thread类的应用.多线程数据同步存在的问题及解决方法.本节给出一个并发编程实例应用案例,通过案例的学习,可以灵活地把多线程知识应用到实际编程中,解决在项目开发 ...

  4. JUC并发编程笔记1__JUC概述、虚假唤醒问题、JUC的生产者和消费者关系、8锁问题(对象锁、类锁区别)

    目录 一.回顾 概念 线程的几个状态 wait和sleep的区别 Synchronized 和 Lock的区别 二.虚假唤醒问题 举例synchronized下的生产者.消费者模式场景 三.JUC下的 ...

  5. Parallel 并发编程实例

    算法计算小于数的所有  素数和 不用Parallel # sum_primes_without_pp.py import math, sys, timedef isprime(n):"&qu ...

  6. Java并发编程实例(synchronized)

    此处用一个小程序来说明一下,逻辑是一个计数器(int i):主要的逻辑功能是,如果同步监视了资源i,则不输出i的值,但如果没有添加关键字synchronized,因为是两个线程并发执行,所以会输出i的 ...

  7. socket详解(附加C++编程实例讲解)

    前言 最近新换了家实习单位,趁着leader去交通局开会,偷个闲整理一下有关于socket通信方面的知识. socket socket可以将其理解为一种"中间件",即TCP/IP协 ...

  8. 第十三章:python中的并发编程详细讲解

    文章目录 第十三章:并发编程 一.操作系统的基本介绍 (一) 多道技术 一.空间上的复用 二.时间上的复用 (二) 操作系统的作用 (三) 多道技术总结 二.并发编程之进程 (一) 基本概念 一.什么 ...

  9. 《JUC并发编程 - 高级篇》01 - 进程与线程概述 | 02 - Java线程(创建线程、查看线程、线程常见方法、线程状态)

  10. python对象编程例子-Python 面向对象编程实例讲解

    如果你没有任何以往的经验与面向对象(OO)编程,你可能想咨询或至少某种教程的入门课程,所以,你必须掌握的基本概念. 然而,这里是小推出的面向对象编程(OOP)给你带来更好的学习速度: OOP的术语概述 ...

最新文章

  1. [收藏] 王永民先生:自我白描
  2. thinkphp-join
  3. APUE-文件和目录(八)文件时间
  4. wxWidgets:Owner-draw 示例,适用于 Windows
  5. Colly实现豆瓣电影Top250爬取
  6. 特斯拉地图数据服务以后由百度地图提供
  7. UnityGI4:混合光照
  8. paip.银行卡号的效检
  9. 用C#打造QQ对战平台挤房器
  10. 学校图书馆借阅管理系统软件项目分析
  11. Unity3D资源加密解决方案
  12. 范围查询-sql语句
  13. solidworks 显示设计库图标
  14. 客户案例:Coremail安全海外中继保障德赛集团跨境通邮安全
  15. corelDraw 的CDR格式解析
  16. ES的基本API操作
  17. 深度学习100问之深入理解Regularization(正则化)
  18. 《哲学史讲演录》——思辨节选---智者派
  19. Flutter之Toast
  20. 手淘Android容器架构——Atlas的前世今生

热门文章

  1. 7-22 切分表达式——写个tokenizer吧 (20 分)
  2. Linux清理cache
  3. pands库中的一些函数用法
  4. LeedCode知识点之位运算
  5. 5、maplotlib中的轴刻度和轴线
  6. 剑指Offer——Python答案
  7. Hive入门学习随笔(二)
  8. python图层合并_Python 2种方法实现叠加矩形框图层
  9. C++ std::condition_variable wait() wait_for() 区别 怎么用 实例
  10. kubernetes视频教程笔记 (28)-集群调度-固定节点调度