并发编程概述

最近学习C#的并发编程,顺便做些笔记,既能加深对知识的理解,又能做些分享,并发不是什么新概念,N多年前就有了,大到服务器端程序,小到桌面客户端应用,并发编程都有用武之地。

  • 服务端的大型程序需要响应大量的客户端数据请求,所以要充分考虑并发。
  • 桌面等客户端应用,因为面向最终用户,程序必须做到即时影响,才能带来很好的体验,这也十分依赖并发。

1. 并发

通俗的讲,并发就是同时做很多任务,实现并发有很多方式,比如多线程,异步,响应是编程,函数式编程,数据流等,都可以实现并发编程。

2. 多线程

多线程是实现并发的一种形式,它采用多个线程来执行程序,是一种最古老最原始的实现并发的方式。
线程是一个独立的运行单元,每个进程内部都可能有多个线程,每个线程可以各自同时执行指令,都有自己独立的栈,并与进程内的其他线程共享内存。

3. 线程池

每个.Net程序都有一个线程池,线程池维护着一定数量的工作线程,这些线程等待着程序分配下来的任务,并且线程池随时监控着线程的数量,它的参数多达数十个,但我们一般采用默认的设置。默认设置一般都是经过精心设计并仔细调整过的,适用于绝大多数现实中的应用场景。

4. 并行处理

4.1 并行处理的定义

把正在执行的任务分成很多小任务,分配给多个同时运行的线程,并让他们在不同的CPU核心上独立运行,就是并行处理。并行处理是多线程的一种,而多线程是并发的一种。

4.2 并行处理的场景

如果程序中有大量的计算任务,并且这个任务能分割成若干个相互独立的小任务,那就应该使用并行编程,并行编程可以提高CPU的运用效率,可以提高吞吐量,适用于大量的CPU密集型运算任务,尤其在现在的多核CPU中。

4.3 并行处理的形式

并行的形式分两种:

  • 数据并行,指有的大量的数据需要处理,并且每一块数据的处理过程都是彼此独立的
  • 任务并行,指有大量的任务需要执行,并且每个任务的执行过程基本都是彼此独立的

5. 异步编程

5.1 异步编程定义

异步编程是并发的一种形式,老式的异步编程采用回调的机制,以避免创建不必要的线程。异步编程的核心概念是异步操作,即启动的操作会在一定时间后才能完成,这个操作正在执行,却并不会阻塞原来的线程,启动了这个操作的线程还可以继续执行其他任务,等操作完成时,它会调用回调函数,已让程序知道操作已经结束了。

5.2 应用场景
  • 对于客户端扥面向终端用户的GUI,即用户界面类型的程序,异步可以提高操作的界面响应能力,不会出现临时锁定界面的情况,程序在执行任务时,不影响用户进行其他输入操作
  • 对于服务端程序来讲,异步编程可以提高扩展性,从而纵向扩展服务端应用的并发能力,接收更多的请求。
5.4 异步与多线程的区别

线程就是实现异步的一个方式,异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。 异步和多线程并不是一个同等关系,异步是最终目的。多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或者交给另外的进程来处理。 如果都是独占cpu 的业务, 在单核情况下多线程和单线程没有区别。

5.5 同步的概念

同步是指,进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。即前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息事件。 其中并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并发是指多核处理器的并发。

6. 响应编程

响应编程是另一种形式的并发编程,它基于异步事件,而不是异步编程中的异步操作,异步操作有一个开始执行的概念,但是异步事件可以在任何时间发生,并且可以发生多次,大概类似于用户响应事件的概念。
它是一种声明式的编程模式,程序在该模式中对事件做出与之对应的响应。

7. 函数式编程

大多数并发编程,其本质都是函数式的,函数式编程有两个原则,一个是简洁,有非常清晰的输入和输出,而且尽可能的避免全局或者共享变量。另一个原则就是不变性,指一段数据不能被修改,程序永远不需要对这些数据进行同步,就是非常简单的输入数据,输出数据。

C#并发编程相关名词解释相关推荐

  1. 神经网络相关名词解释

    神经网络相关名词解释 这篇文章的目的是把之前概念理解的名词用公式记忆一下. 1. 正则化 1.0 过拟合 这是正则化主要解决的问题. 过拟合现象主要体现在accuracy rate和cost两方面: ...

  2. 名词解释_写字楼租赁相关名词解释

    对于租赁写字楼的租户来说,那些繁琐的合同是很令人头疼的.有时候连最基础的一些问题还没得到解决,就要面对一堆复杂的文书,会使租赁写字楼的租户开始迟疑.那么在这里我们给大家科普一下关于写字楼租赁你需要知道 ...

  3. 虚拟空间,域名解析,A记录,MX记录,CNAME记录,TTL 等 更多Web服务器相关名词解释

    虚拟空间,域名解析,A记录,MX记录,CNAME记录,TTL 等 更多Web服务器相关名词解释 租用空间.网站服务器相关名词解释 什么是域名服务器? 域名服务器(Domain Name Server, ...

  4. 创新创业名词解释_(完整word版)“大众创业万众创新”相关名词解释总汇

    . . "大众创业万众创新"相关名词解释总汇 "大众创业,万众创新"的背景 从国际形势上看, 一方面受国际经济情况不容乐观局面的影 响,世界经济发展放缓,国际经 ...

  5. GWAS相关名词解释及基础知识储备[长期更新]

    转载自GWAS综述(生信文献阅读俱乐部精选) 相关名词解释 Genome-wide association studies(关联分析):扫描遗传标记,通常是单核苷酸多态性(SNPs),使用统计学相关的 ...

  6. 创新创业名词解释_“大众创业万众创新”相关名词解释总汇

    - 1 - "大众创业万众创新"相关名词解释总汇 "大众创业,万众创新"的背景 从国际形势上看, 一方面受国际经济情况不容乐观局面的影 响,世界经济发展放缓,国 ...

  7. 人工智能相关名词解释(参考王万良教授《人工智能导论》以及网络博客)

    人工智能相关名词解释(参考王万良教授<人工智能导论>以及网络博客) 1.机器学习:机器学习是一门多领域交叉学科,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已 ...

  8. 复习Java第二个项目仿QQ聊天系统 03(两种通信类、登录以及注册功能完善) Java面试题并发编程相关知识生活【记录一个咸鱼大学生三个月的奋进生活】025

    记录一个咸鱼大学生三个月的奋进生活025 复习Java(仿QQ聊天系统03两种通信类.登录以及注册功能完善) TcpSocket类(与服务器进行通信) Server类(服务器类) TcpMessage ...

  9. 【eMMC学习记录】emmc相关名词解释和基础概念

    名词解释 NAND Flash:半导体闪存 HDD:机械硬盘 FW:固件 Peak Power:峰值功率 Active Power:读写功耗 Idle Power:空闲功耗 standby/sleep ...

最新文章

  1. 随笔:送给初次使用PCL库的小伙伴
  2. Python生成器主要用法
  3. js进阶 14-6 $.ajax()方法如何使用
  4. Ubuntu 意外死机 (Linux Crash/Hang)解决
  5. 华为手机照片 计算机,教你华为手机怎么传照片到电脑上去
  6. 三因子两水平doe_温故而知新 | DOE实验设计学习系列之(三):多因子DOE的魅力 (附视频)...
  7. Linux CentOS安装增强功能--完整版命令
  8. 疫情让鲸类暂时远离了人工噪声,但在这之前,它们已被打扰了一百多年
  9. python 100以内的奇数和_python入门:输出1-100之内的所有奇数和偶数
  10. 计算机配件出口单证,出口制单
  11. 计算机学院主管学生日常工作的是,学生会的年度计划书(网络版)doc(完整版)...
  12. unreal world 皮革_不真实的世界Unreal World新手速刷攻略是什么?
  13. 同是匿名社交,国内外“秘密”大不同
  14. 南华大学【软卓】【ACM协会】【其它学习生活方面】QA
  15. ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed问题解决
  16. struct——结构体
  17. 计算机文件与桌面文件同步,电脑文件同步到手机的技巧
  18. 分糖果 小明从糖果盒中
  19. 南加大计算机本科学费,南加州大学学费多少
  20. 考研复试(控制工程专硕)及大学本科(物联网工程)知识点回顾(一)——C语言/单片机

热门文章

  1. Github每日精选(第37期):零依赖的简单、响应式、现代 SVG 图表frappe-charts
  2. 【学生请假系统——开题报告 分享(仅供参考呀)】
  3. MATLAB读取一张RGB图片转成YUV420格式、YUV422格式、YUV444格式
  4. PMP考前冲刺2.8 | 2023新征程,一举拿证
  5. 高中计算机生机比例,例谈高中诗歌教学之“多媒体信息技术深度融合”
  6. 数据集处理----将.dat文件转换为.csv文件
  7. 迈克菲无法更新您的软件。
  8. echarts象形柱图的图标怎么更改
  9. STM32之 AT24C16(EEPROM)驱动代码(程序稳定,清晰明了)
  10. [丁奇四十五讲]第8讲学习笔记