并发编程概述

前言

  我们经常在耳边听说一些关于高性能、并发和并行等名词,并且很多人都对并发编程有一些误解。

  误解 1:并发就是多线程?
  答:多线程只不过是并发编程的其中一种形式而已。并发编程的种类很多:如异步、并行、TPL 数据流和响应式编程等。
  误解 2:只有大型服务器程序才需要考虑高并发?
  答:我们平时常用的桌面应用、手机移动端应用和 B/S 应用等都应该考虑使用并发编程,现代用户的生活质量普遍提高,带宽也越来越大,用户的要求也越来越苛刻。用户的请求必须得到及时快速的响应,无法满足这样需求的企业,用户的流失也是必然的。
  误解3:并发编程很复杂,只是高手的专利?
  答:No!No!No! 在 long long ago,也许说的很对,那时候也的确是高级程序员的杰作。但到了现在,从 .NET 4.5 引入的 async/await 关键字,编写异步代码已经变成一件很轻松的事情了。

1.1 并发编程简介

  1.并发:同时做多件事情。

  -- 利用并发,在对 DB 进行读写操作的同时也可以响应用户的输入;
  -- 利用并发,服务器可以同时处理多个请求;
  -- 假如你希望编写的程序可以同时做多件事情,你就需要使用并发技术。

  2.多线程:并发的一种形式,采用多个线程来执行程序。
  -- 多线程只是并发的一种形式,不是唯一形式。我们从 .NET 4.5 开始就应该使用更高级的抽象机制让程序变得更加强大、效率更高。

  

  【注意】一旦你输入 new Thread(),说明项目中的代码已经过时了。

  3.并行处理(并行编程):把正在执行的大量的任务分割成小块,分配给同时运行的线程。

  --线程池中要求使用多线程的技术,它存放着任务的队列,并且这个队列能够根据需要自行调整。相应地,产生了另一种并发形式:并行处理。
  -- 希望处理器的利用率最大化,通过多线程来实现并行处理。现代个人 PC 的 CPU 动不动就 4 核以上的,如果只用其中一个核来执行任务,其它核空闲待命中,岂不是浪费资源。
  -- 通过并行处理,把任务划分成小块,并分配给多个线程,让他们在不同的核心上独立运行。
  -- 并行处理是多线程中的一种,多线程是并发的一种。

  4.异步编程:并发的一种形式,采用 future 模式或回调(callback)机制,以避免产生不必要的线程。
  -- 异步编程的核心理念是异步操作:启动了的操作将会在一段时间后完成。该操作正在执行时,不会阻塞原来的线程。启动了改操作的线程,可以继续执行其他任务。当操作完成时(方法调用完毕),会通知它的 future,或者调用回调函数通知程序。

  5.响应式编程:一种声明式的编程模式,程序在该模式中对时间做出响应。
  -- 和异步编程不同的是,异步编程基于异步操作,它基于的是异步事件。异步事件可以没有一个实际的“开始”,可以在任何时间,并且可以发生多次,如用户输入。
  -- 如果把程序看成一个强大的状态机,则该程序的行为可视为它对一系列事件所做出的响应,即每触发一个事件就更新一次状态。响应式编程不一定是并发的,但在考虑并发的时候是需要把它一起思考进去的。


【博主】骨折仔

【原文】http://www.cnblogs.com/liqingwen/p/7206210.html

【参考】《Concurrency in C# Cookbook》

[C#] 《Concurrency in C# Cookbook》读书笔记(一)- 并发编程概述的更多相关文章

  1. Java并发编程的艺术读书笔记(2)-并发编程模型

    title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...

  2. Java并发编程的艺术读书笔记(1)-并发编程的挑战

    title: Java并发编程的艺术读书笔记(1)-并发编程的挑战 date: 2017-05-03 23:28:45 tags: ['多线程','并发'] categories: 读书笔记 --- ...

  3. 读书笔记-----Java并发编程实战(二)对象的共享

    public class NoVisibility{ private static boolean ready; private static int number; private static c ...

  4. 读书笔记-----Java并发编程实战(一)线程安全性

    线程安全类:在线程安全类中封装了必要的同步机制,客户端无须进一步采取同步措施 示例:一个无状态的Servlet @ThreadSafe public class StatelessFactorizer ...

  5. <<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步(1)

    <<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步 并发问题是所有问题的基础,也是操作系统设计的基础.并发包括很多设计问题,其中有进程间通信,资源共享与竞争,多个 ...

  6. 《Essential C++》读书笔记 之 C++编程基础

    <Essential C++>读书笔记 之 C++编程基础 2014-07-03 1.1 如何撰写C++程序 头文件 命名空间 1.2 对象的定义与初始化 1.3 撰写表达式 运算符的优先 ...

  7. [笔记][Java7并发编程实战手冊]3.8 并发任务间的数据交换Exchanger

    [笔记][Java7并发编程实战手冊]系列文件夹 简单介绍 Exchanger 是一个同步辅助类.用于两个并发线程之间在一个同步点进行数据交换. 同意两个线程在某一个点进行数据交换. 本章exchan ...

  8. [笔记][Java7并发编程实战手冊]系列文件夹

    推荐学习多线程之前要看的书. [笔记][思维导图]读深入理解JAVA内存模型整理的思维导图文章里面的思维导图或则相应的书籍.去看一遍. 能理解为什么并发编程就会出现故障. Java7并发编程实战手冊 ...

  9. [笔记][Java7并发编程实战手冊]3.4 等待多个并发事件的完毕CountDownLatch倒计数闭锁

    [笔记][Java7并发编程实战手冊]系列文件夹 简单介绍 本文学习CountDownLatch 倒计数闭锁. 本人英文不好.靠机器翻译,然后有一段非常形象的描写叙述,让我把它叫为倒计数 用给定的计数 ...

随机推荐

  1. IO流与IO缓冲

    1.字节与字符的演变 public class inputStream { public static void test1() throws Exception{ File file= new Fi ...

  2. php中的echo,json_decode,json_encode常用函数使用注意事项

    ---恢复内容开始--- 1.echo函数 echo只能输出单个字符串或者整数,不能直接输出数组.要输出多个字符串必须用分号 eg: echo可以输出字符串加变量,如果输出的数字字符串则会将对应的数字 ...

  3. Linux(常用命令) 中常用的压缩丶解压缩格式命令和参数详解

    Linux中常用的压缩格式后缀名有:①.zip  ②.gz  ③.bz2  ④.tar.gz  ⑤.tar.bz2 ①.zip后缀名格式 1.压缩 语法: ①zip 压缩文件名 源文件 (压缩文件) ...

  4. 关于构造函数和原型prototype对象的理解

    构造函数     1.什么是构造函数 构造函数,主要用于对象创建的初始化,和new运算符一起用于创建对象,一个类可以有多个构造函数,因为函数名相同,所以只能通过参数的个数和类型不同进行区分,即构造函数 ...

  5. faster-rcnn系列笔记(一)

    目录: 1. 序言 2.正文 2.1  关于ROI 2.2  关于RPN 2.3 关于anchor 3. 关于数据集合制作 4. 关于参数设置 5. 参考 1.序言 叽歪一下目标检测这个模型吧,这篇笔 ...

  6. CSS3使用content属性来插入项目编号

    首先可以使用before选择器与after选择器的content属性在元素的前面或者后面插入文字和图像,这里我记录的是利用这个content属性来在项目前插入项目编号,同时可以利用content属性在 ...

  7. CTF---密码学入门第四题 困在栅栏里的凯撒

    困在栅栏里的凯撒分值:10 来源: 北邮天枢战队 难度:易 参与人数:4531人 Get Flag:2124人 答题人数:2285人 解题通过率:93% 小白发现了一段很6的字符:NlEyQd{sef ...

  8. Gym 100952B&&2015 HIAST Collegiate Programming Contest B. New Job【模拟】

    B. New Job time limit per test:1 second memory limit per test:64 megabytes input:standard input outp ...

  9. list容器的C++代码实现

    #include <iostream> using namespace std; template  <class T> class mylist;//前置声明 templat ...

  10. [国嵌攻略][051][NandFlash原理解析]

    扮演角色 相当于嵌入式设备的硬盘 NandFlash分类 1.SCL(single level cell):单层式存储 2.MLC(multi level cell):多层式存储 3.SCL在存储格上 ...