对于pike 并发在于结构,并行在于执行的思考

并发在于结构,并行在于执行

程序:本文所说的程序是指为了完成某个具体任务,而开发的一套软件,其微观动态上可以是(一组进程,多个线程,或者是一组协程执行体)

并行就是在任一粒度的时间内都具备同时执行的能力:最简单的并行就是多机,多台机器并行处理;SMP表面上看是并行的,但是由于是共享内存,以及线程间的同步等,不可能完全做到并行;

并发是在规定的时间粒度内多个请求都得到执行和处理,强调的是给人的感觉,实际可能是分时操作,重在避免阻塞,使程序不会因为一个阻塞而停止处理,最典型的应用场景就是:分时操作系统就是一种并发设计(忽略多核CPU);

在当前的计算机单机体系下:并行具有瞬时性,并发具有过程性;

在非计算密集型应用中,CPU的处理能力是非常出众的,CPU大都因为等待其他部件而阻塞,(磁盘,网络,其他设备);此时为了发挥CPU的运行效率,就需要将一个大程序拆分为多个执行体(多线程,多进程),最大限度的发挥

CPU的处理能力,提高程序吞吐量,这也是多线程,多进程编程的最大目的。

并发强调的是程序的设计粒度,粒度小,调度快,给人在感觉上同时处理(避免阻塞,等待时间短);

程序在运行中可能遇到各种等待,等待IO操作,所以在设计程序结构时,将其设计成多个执行体,一个执行体阻塞,其他执行体能正常运行;

实现并发的技术有多种:多进程消息队列,多线程,协程(go的goroutine并发设计理念,当然多个goroutine的通信和锁机制是另一个主题);

协程一般需要软件库支持或者语言层面的支持,在用户态再做一层调度,协程是更小用户态的执行体,可以有成千上万,底层支撑是多线程来执行,最复杂的就是支撑调度的运行时(golang是在语言层面解决,程序员简单实用go就可以,调度完全是语言运行时去解决)。

并行就是同时处理,其属于更底层的东西,一般是CPU和操作系统开发者需要着重考虑的问题:CPU功耗,CPU调度和负载平衡等等;

作为普通的程序员,唯一可以选择的就是充分借助OS提供的接口结合实际需求合理设计程序(常见的高性能编程模式:多进程,多线程,协程(用户态线程调度));

#线程数量选择:

如果所有的任务都是计算密集型的,此时系统上跑的内核线程数和CPU核心数保持一致,能最大限度的发挥CPU的优势;

如果任务是IO密集型的任务,我们可以开辟更多的线程执行任务;当一个任务执行IO操作的时候,线程将会被阻塞,处理器立刻会切换到另外一个合适的线程去执行。

#默认如果不是在裸机上写程序,某人说自己写并行程序,其实是在扯淡,隔着一层OS,程序员不能控制CPU的并行执行,其只能委托给OS去处理,实际上大多数程序员只能通过OS提供的特性来提升程序并发处理能力,OS提供的往往都是多线程,多进程模型;当然高级语言的运行时提供用户态协程;

Linux之父Linus都认为并行计算基本上就是浪费大家的时间,可见并行编程领域充满分歧和争议。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-30 10:10:21

对于pike 并发在于结构,并行在于执行的思考的相关文章

并发多阶段任务的执行——Phaser

java并发API从java7提供了并发多阶段任务的抽象Phaser.如果我们有并发任务且需要分段执行的时候 我们可以考虑Phaser这个类. Phaser有一个特别的地方,即不需要处理InterruptedException除了(awaitAdvanceInterruptibly(int phaser)方法) 我们模拟一种场景: 我们有三个任务,分别从三个不同的文件夹及其子文件夹查找过去24小时内修改过的扩展名 为.log的文件.这三个任务分别包含以下三个步骤: 1.在指定的文件夹下筛选出扩展

并行的执行效率一定高于串行吗?(多线程的执行效率一定高于单线程吗?)

一.什么是串行?什么是并行? 串行:任务进行排队,一个一个执行: 并行:多个任务齐头并进.   二.单核.多核这两种情况下的并行. 单核情况下的并行:并非真的是多个任务同时进行的,是需要在这任务之间来回切换(即上下文切换)的. 多核情况下的并行:是几核,就能真正做到几核同时执行各自的任务. 三.任务的两大类型. “计算密集型”任务: 特点是要进行大量的计算,消耗CPU资源,比如计算圆周率.对视频进行高清解码等等,全靠CPU的运算能力. 这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在

有关执行力的思考

执行力低下是游戏开发团队的普遍问题,从业这么久了,还真没见过把执行做得很好的团队.几乎所有团队都是靠热情在推动,而热情是个很脆弱的东西,非常靠不住. 究竟什么才是执行力的基础呢,我考虑过这个问题好多年了,我想每个人都会有每个人的见解吧.以我的经历尚不能给出一个精准的答案,但也有一个大致的范畴. 规范,严谨,责任,公正,积极,我总结出最重要的5个关键词. 规范: 规范就是标准化流程SOP.为什么把规范放在第一个呢,因为游戏制作过程本身是一个相对无法用量化的指标去监控的过程,很多人觉得规范多了会束缚

学习 《构建高并发网站结构》记录

一,大型网站的特点: 1,并发数量高,访问量大. 2,处理的数据大(上1势必造成如下) 3,用户分布广泛,网络环境复杂. 4,稳定性高. 5,易于扩展. 6,安全性高. 二,大型网站的基础设施 1,服务器介绍 1.1,塔式服务器 :外形与普通pc机差不多,个头相对大一点.特点,插槽多,扩展性强,常用于入门级和工作组级别的服务器,不过相对占空间. 1.2,机架式服务器:宽度为19英寸,高度以U为单位(1U=1.75英寸=44.45毫米) 这种服务器占用空间小,可以将多台服务器装到1个机柜上,方便统

CPU内部组成结构及指令执行过程

  计算机的基本硬件系统由运算器.控制器.存储器和输入.输出设备五大部件组成.运算器和控制器等部件被集成在一起统称为中央处理单元(Central Processing Unit,CPU). CPU的功能 (1)程序控制   CPU通过执行指令来控制程序的执行顺序,这是CPU的重要职能. (2)操作控制   一条指令功能的实现需要若干个操作信号来完成,CPU产生每条指令的操作信号并将操作信号送往不同的部件,控制相应的部件按指令的功能要求进行操作. (3)时间控制   CPU对各种操作进行时间上的控

为什么选择Arduino开源平台,关键在于开源,在于造物精神

我喜欢开源这个词,这是一个神奇的概念,这并不意味着我们不支持版权法.知识产权必须得到保护,这是科技进步的根本保证.正因为这个保护,才让一些天才的想法成为现实,推动了文明的发展.这与开源并不冲突,我们需要创造力!但是创造力是培养出来的,在培养创造力这个阶段,我们需要开源这个理念! Arduino开源平台就是一个典范! 首先,做到设计开放源代码很容易! 如何开放硬件平台,Arduino选择了Creative Commons许可,保证了任何人都被允许生产电路板的复制品,还能重新设计,甚至销售原设计的复

joomla代码结构原理,执行流程

joomla-安装 下载源码 解压到apache发布目录 访问http://xxx/installation/index.php 根据实际情况访问 按每步提示操作,mysql库要先建立,ftp可暂时不开 删除安装文件即可 joomla代码结构 Joomla 2.5主要目录结构 ├─administrator     # 后台程序部分 ├─cache             # 用于存放cache,需要保持可写 ├─components        # 组件,每个组件一个文件夹,通常是com_*

shell脚本的基本结构以及如何执行

1.shell脚本通常以.sh为后缀,不是说不带这个.sh脚本就不会执行,而是大家一种通用的命名规范而已 2.shell脚本中的第一行一定是:#! /bin/bash.该命令说明,该文件使用的是bash语法,如果不设置该行,则该脚本不会被执行 3.新建一个脚本:(1)nano test.sh   (2)vim test.sh  ,根据你的喜好都可以 4.执行一个脚本:sh test.sh 5.在脚本中引用定义的变量需要使用“$”符号 6.echo就像一面镜子,你输入什么,对应平台就输出什么.你就

防止线程并发导致事务的重复执行

1.可以借助第三方,如redis进行处理,在事务执行之前通过对Redis hash 添加一个记录标记当前有事务正在执行,在事务结束之后,删除对Hash记录,防止缓存数据过多.为了防止异常导致的事务没有执行成功而下一次不能执行事务的可能.需要针对事务块代码进行捕获异常进行处理,总之,finally 需要清除掉当前正在执行的标记. 2.可以通过Mysql建立数据字典表,设置好主键,通过本地事务的方式,只有成功往数据字典插入记录才执行事务,否则,回滚事务.这里需要注意的是,插入重复键值时,需要通过再I