并发模型之——基本概念

从很久之前在学校到现在我们编程的时候经常都有听说到并发编程,偶尔也会听到说并行,但我们很多人其实都不太清除并发并行具体的区别在哪;我们刚开始学习编程语言的时候我相信我们写的都是串行程序,一步接着一步来,可以说这比并发程序更不容易出错,但在性能上要远不如并发;还有一种并发具有很强容错性:分布式程序,分布式程序也算是并发程序,还可以具有很强的容错性,可以分开部署;
     并发与并行有着本质上的区别。
     并发指程序在同一时间只能做一个操作,但是可以在不同的时间点()做多个操作;
     如:人是一个多线程的物种,只有你一个人的时候你开启多线程“一边炒菜,一边玩iPad”,但其实在某一时间点,人只可以做一件事,当我们翻炒菜的时候不可能还在玩iPad,当我们在玩iPad的时候不可能还能够翻炒菜,只有我们不在翻炒的时候才能够玩iPad,只有我们放下手中的iPad的时候才能够翻炒,但从时间概念上看我们还是在边炒菜边玩iPad;这样炒出来的菜可能不好吃,哈哈,就如并发编程一样存在资源的竞争,这里竞争的资源是手、眼睛,在计算机里是CPU,处处存在危机,一不小心就烧焦了,哈哈!
     并行指在同一个时间点可以做几个相同的操作或几个不相同的操作;
     如:现在家有你和你女朋友两个人,这个时候就不用你炒菜了,在你女朋友炒菜的时候你就可以哔哩啪啦的玩iPad了,等你女朋友做好饭就你可以吃了(不是好男人);就如现在很多计算机中都有多个CPU,我们可以写出比并发性能更高可以同时跑在多个CPU上的程序,但前提是你要有条件(多个CPU的计算机);
并发不是并行,有时候并行也是并发,有时候只是并行不是并发;只有当并行从整体上看是多个任务时才也是并发,但并行只是一个任务的时候那只是并行;
这个系列说的只是编程中的并发模型,可能有时候也会谈到并行,但重点是并发模型;

这系列文章主要将会谈论到这么几个并发模型:线程与锁模型、Actor模型、Go的CSP模型等;

文章首发地址:Solinx
http://www.solinx.co/archives/175

时间: 2024-10-01 21:31:40

并发模型之——基本概念的相关文章

【Java并发编程】6、volatile关键字解析&内存模型&并发编程中三概念

转自:http://www.cnblogs.com/dolphin0520/p/3920373.html volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以重获生机. volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情.由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来

由Go语言并发模型想到游戏服务器并发

这段时间看了一些Go语言相关的东西,发现Go语言的最大特性并发模型类似于C++里面的线程池,正好我们项目服务器也是用的线程池,记录下. Go语言的并发单位是语言内置的协程,使用关键字go+函数创建一个新的协程,新创建的协程会自动加入到协程调度上下文的等待调度队列,一个协程调度上下文对应一个线程,一个协程调度上下文对应多个协程.新加入的协程会动态负载到各个调度上下文,如果所有调度上下文的平均负载较高时,总调度器会自动创建新的线程和对应的调度上下文用于工作.整体上看,是N个线程:N个调度上下文:M个

并发模型与Event Loop

JavaScript的并发模型基于"event loop".这个模型与其他在C或者Java中的模型着实不同. 运行时概念 下面的内容解释了一个理论上的模型.现代JavaScript引擎着重实现和优化了描述的几个语义. 可视化描述 栈 函数调用形成了一个frames的栈. function f(b){   var a = 12;   return a+b+35;}function g(x){   var m = 4;   return f(m*x);}g(21); 调用g的时候,创建了第

golang中的CSP并发模型

1. 相关概念: 用户态:当一个进程在执行用户自己的代码时处于用户运行态(用户态) 内核态:当一个进程因为系统调用陷入内核代码中执行时处于内核运行态(内核态),引入内核态防止用户态的程序随意的操作内核地址空间,具有一定的安全保护作用.这种保护模式是通过内存页表操作等机制,保证进程间的地址空间不会相互冲突,一个进程的操作不会修改另一个进程地址空间中的数据. 用户态与内核态之间的切换:当在系统中执行一个程序时,大部分时间都是运行在用户态下的,在其需要操作系统帮助完成一些用户态自己没有特权和能力完成的

课堂笔记--Strom并发模型

Strom并发模型: topology是如何运行的?(可与mapreduce对比) 第一层:cluster 第二层:supervisor(host.node.机器) 第三层:worker(进程) 第四层:executor(线程) 第五层:task(线程的一个个对象.如Spout和Blot) //topology:N workers==每个==>1 excutor=>1 task //此时,它和mapreduce那个是一样的 topology代码    conf.setNumWorkers(2)

系统吞吐量(TPS)、用户并发量、性能测试概念和公式

系统吞吐量(TPS).用户并发量.性能测试概念和公式 PS:下面是性能测试的主要概念和计算公式,记录下: 一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联. 单个reqeust 对CPU消耗越高,外部系统接口.IO影响速度越慢,系统吞吐能力越低,反之越高. 系统吞吐量几个重要参数:QPS(TPS).并发数.响应时间 QPS(TPS):每秒钟request/事务 数量 并发数: 系统同时处理的request/事务数 响应时间:  一般取平

Java并发模型(一)

学习资料来自http://ifeve.com/java-concurrency-thread-directory/ 一.多线程 进程和线程的区别: 一个程序运行至少一个进程,一个进程至少包含一个线程. 多线程: 多线程使得在一个程序内部能够拥有多个线程并行执行,一个线程的执行可以被认为是一个cpu在执行该程序,当一个程序运行在多线程下,就好像有多个CPU在同时执行该程序. 多线程在同一个程序内部并发执行,因此会对相同的内存空间进行并发读写操作. 思考: 如果一个线程在读一个内存时,另一个线程正向

并发模型—共享内存模型(线程与锁)示例篇

共享内存模型,顾名思义就是通过共享内存来实现并发的模型,当多个线程在并发执行中使用共享资源时如不对所共享的资源进行约定或特殊处理时就会出现读到脏数据.无效数据等问题:而为了决解共享资源所引起的这些问题,Java中引入了同步.锁.原子类型等这些用于处理共享资源的操作; 在本篇文章中,将通过几个Demo来介绍Java的synchronized.lock.atomic相关类等,Java的共享内存并发模型也就体现在同步(synchronized).锁(lock)等这些实现上: 同步: Demo中开启两个

web并发模型

并发:cpu划分时间片,轮流执行每个请求任务,时间片到期后,换到下一个. 并行:在多核服务器上,每个cpu内核执行一个任务,是真正的并行 IO密集型的应用,由于请求过程中很多时间都是外部IO操作,CPU在wait状态,所以并发执行可以有效提高系统吞吐量 纯CPU密集型的应用:在单核上并发执行多个请求,不能提高系统吞吐量(由于任务来回场景切换的开销,吞吐量反而会下降);只有多核并行运算,才能有效提高吞吐量 web并发模型有:multi-process   multi-thread    multi