1.2 为什么使用 并行

在程序中使用并行有两大原因:功能和性能分离,事实上,它是使用并发的唯一理由,其他的你看上去难的可以归结为一个理由。

1.2.1 为功能分离使用并行

写软件时功能分离是一个好主意,把相关的代码放在一起,把不想管的代码分离,你会让你的程序更容易理解和测试,并且会减少bugs,你可以使用并行分离单独的功能,甚至在这些单独的功能同事发生;如果没有并行,你就不得不写一个任务切换的框架或者在一个操作中调用不相关的代码。

考虑到一个处理密集的用户界面程序,比如DVD播放器,这样有两个基础功能的程序:不仅要从实时的从硬盘读取数据,解码,发送到显卡和声卡,准确的显示出来。还要响应用户的输入,比如点击暂停或者回到菜单、甚至推出。在一个线程中,程序必须定时检测用户输入,DVD播放的代码与用户界面的代码会交织在一起。通过使用多线程去分隔不同的功能,DVD播放的代码与用户界面的代码不必非交织在一起。一个线程处理用户界面,另一个线程处理播放,他们会相互作用,比如当点击暂停时,直接作用到相关的任务上。

这会提高用户体验,因为用洁面线程可以立刻响应用户请求,即使这个响应是简单的显示一个繁忙的鼠标或者发送一个请等待的消息。类似的,分离线程经常被用来运行后台程序,比如在一个桌面搜索程序中监视文件系统的改变。使用这种方法使每个线程的逻辑更简单,因为他们的相互作用可以被清晰的标示出来,不同的任务逻辑被分散。

线程数是独立于可用的CPU核心数的,因为分隔线程是基于提高性能的概念设计的。

1.2.2 为性能使用并行

多进程系统已经存在很多年了,但是现在只能在在超级计算机,主流框架和大型服务系统中看到了,但是芯片制造商已经设计出了2,4,16或者更多进程的芯片以提供更好的性能。因此,多核桌面计算机,甚至多核嵌入式设备,越来越普遍。这些计算机性能的提高不是运行一个任务越来越快,而是运行多任务能力越来越高。过去程序员不用做任何努力就能看到他们的程序在新一代的处理器中运行的更快。但是现在,如果软件要运行更快必须设计并行任务。程序员必须谨慎并且把并行添加到他们的工具箱。

有两个方法使用并行提高性能,第一个,把一个任务分隔成几部分去同时执行,这回减少总的运行时间。听起来很简单,但他有时是一个很复杂的过程,因为这几部分之间可能是相互关联的。这种分离的处理方法,一个线程执行一部分计算当另一个线程执行不同的部分时,或者每个线程执行相同的操作在不同的数据上。这被称作数据平行。

时间: 2024-11-17 10:15:10

1.2 为什么使用 并行的相关文章

Oracle 并行案例解析

|   0 | SELECT STATEMENT         |          |   107 |  2782 |     3  (34)| 00:00:01 |        |      |            | |   1 |  PX COORDINATOR          |          |       |       |            |          |        |      |            | |   2 |   PX SEND QC

Apache HTTPserver安装后报:无法启动,由于应用程序的并行配置不对-(已解决)

原创作品.出自 "深蓝的blog" 博客.欢迎转载,转载时请务必注明出处.否则有权追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46375453 安装Apache Http Server后报"应用程序无法启动,由于应用程序的并行配置不对"错误. 无法启动: 错误信息:应用程序无法启动,由于应用程序的并行配置不对.请參阅应用程序事件日志,或使用sxstrace.exe. 解决思路

c#:ThreadPool实现并行分析,并实现线程同步结束

背景: 一般情况下,经常会遇到一个单线程程序时执行对CPU,MEMORY,IO利用率上不来,且速度慢下问题:那么,怎么解决这些问题呢? 据我个人经验来说有以下两种方式: 1.并行.多线程(Parallel.Task.ThreadPool) 2.多进程MutilpleProcess 恰好工作中又一次遇到单线程程序性能低的问题,本次我主要想尝试使用ThreadPool来实现多线程,并且在实现多线程任务同步结束. 测试代码: 1 static void Main(string[] args) 2 {

并行设计模式(二)-- Master-Worker模式

Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Master-Worker模式,关于其他多线程设计模式的地址如下: 关于Future模式的详解:并行设计模式(一)-- Future模式 关于Guarded Suspeionsion模式的详解:并行设计模式(三)-- Guarded Suspeionsion模式 关于不变模式的详解:并行设计模式(四)--

【CUDA并行编程之四】矩阵相乘

前面介绍了基本的Cuda编程的相关知识,那么这一篇在此基础之上来看看GPU在处理数据计算上的高效能,我们拿矩阵相乘来作为例子. 1.CPU上执行矩阵相乘以及性能. 在CPU上进行矩阵相乘运算的代码: mat_mul.cc: <span style="font-family:Microsoft YaHei;font-size:18px;">//a[i]*b[i] + c[i] = d[i] #include<iostream> #include<vector

C#并行编程

一.基于任务的程序设计 共享内存多核OS和分布式内存OS 共享内存多核OS-一个微处理器由多个内核组成,且每个内核共享一段私有内存: 分布式内存OS-- 由多个微处理器组成,每个微处理器可以有自己的私有内存,微处理器可以位于不同的计算机上,每个计算机可以有不同的通信信道 消息传递接口(MPI):运行在分布式内存计算机系统上的并行应用程序所使用的最流行的通信协议: 并行程序设计和多核程序设计 并行程序是指同一时刻运行多条指令,编写的代码能够充分利用底层硬件提供的并行执行能力:多核程序设计能够充分利

GoldenGate复制单表开并行

最近有几项业务下线,需要从一张表中删除6.8亿多条数据.想办法把数据删除掉了,但对应的ogg灾备端复制时有了的延迟,而且延迟的时间起来越长. 对于表太多造成的延迟可以把所有表分为多个组来做复制,于是想复制进程是否可以对单表复制开并行.上网查到了相关的资料,可以使用@RANGE函数对单表作表内的拆分,通过对表上主键列作hash算法将该表上发生的变更均分到多个replicat上来降低单个replicat组件的负载. 动手实验一下: ogg搭建过程不再重复,从网上就可以查到. 实验过程:模拟在源端对表

并行设计模式(一)-- Future模式

Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Future模式,关于其他多线程设计模式的地址如下: 关于Master-Worker模式的详解:并行设计模式(二)-- Master-Worker模式 关于Guarded Suspeionsion模式的详解:并行设计模式(三)-- Guarded Suspeionsion模式 关于不变模式的详解:并行设计模

linux并行与竞态

内核态的竞态与并行 中断屏蔽: local_irq_save(flags) local_irq_restore(flags) Telnet 192.168.x.x登录开发板 #if 0 ...... #endif 原子操作 原子操作指的是在执行过程中不会被别的代码所中断的操作. 分为 位 和 整型变量 两类原子操作. void atomic_set(atomic_t *v, int i);   //设置原子变量v的值为i atomic_t v = ATOMIC_INIT(0);         

并行编程入门

目录 1. 并行编程简介 2. MapReduce 2.1 MapReduce简介 2.2 MapReduce框架 2.3 Hadoop介绍 2.4 Hadoop基本类 2.5 Hadoop编程实例 1.并行编程简介 1.1.并行编程作用,用途 商业用途,科学计算,大数据分析 1.2.并行编程兴起原因 目前的串行编程的局限性 使用的流水线等隐式并行模式的局限性 硬件的发展 1.3.并行算法设计原则步骤 a.分析问题 b.分解问题 其中分解方法有: 数据分解 递归分解 探测性分解 推测性分解 混合