1.4.3.2 使用 PLINQ 的声明式并行

声明式编程风格提供了另一种写并行程序的方法。我们知道,用声明式写代码,就是进行基元组成。在 LINQ 中,这些基元是查询运算符,比如 where 和 select。使用声明式风格,我们可以很容易替换基元的实现,PLINQ 就是这样做的:我们能够用并行的查询运算符替换标准查询运算符。

清单 1.9 是一个查询,更新虚拟游戏中的所有怪物,并删除上一步中死掉的怪物。[ 并行化的]改变非常简单,因此,我们可以用一个清单展示两个版本。

Listing 1.9 Parallelizing data processingcode using PLINQ (C#)


var updated =

from m in monsters

let nm = m.PerformStep()

where nm.IsAlive select nm;


var updated =

from m in monsters.AsParallel()  [1]

let nm = m.PerformStep()

where nm.IsAlive select nm;

在右侧的并行版本中,我们所做的唯一改变是添加了调用 AsParallel 方法[1],这个调用改变了查询运行时的基元,并使整段代码得以并行。在第十二章,我们将会看到其工作原理,并讨论声明式计算,第十四章重点关注并行式程序设计。

你可能会想,我们在程序中并不常用 LINQ 查询。绝对正确,因为在命令式程序中,LINQ 查询很少用;但是,在函数程序中,大都使用声明式风格处理数据。在 C# 中,可以写查询表达式,而F# 则提供了高阶列表处理函数(我们将在第五章和第六章所看到)。这意味着,你读过本书以后,在处理数据的时候,就可以更多地使用声明式编程,这样,你的程序将更容易实现并行化。

我们已经介绍了两种方法,能够用来简化函数式编程的并行化,这也是函数式思想在今天非常受人关注的原因之一,在第十三章和第十四章,我们还要再讨论这个问题以及相关主题。

在开始讨论真正的函数式程序之前,我们需要了解一下 F# 这种语言,首先看一下经典的 Hello world 程序,以及 F# 中的工具。下面一节将简要介绍开发 F# 解决方案的典型过程。

1.4.3.2 使用 PLINQ 的声明式并行

时间: 2024-10-10 23:43:13

1.4.3.2 使用 PLINQ 的声明式并行的相关文章

C#并行编程-PLINQ:声明式数据并行

原文:C#并行编程-PLINQ:声明式数据并行 背景 通过LINQ可以方便的查询并处理不同的数据源,使用Parallel LINQ (PLINQ)来充分获得并行化所带来的优势. PLINQ不仅实现了完整的LINQ操作符,而且还添加了一些用于执行并行的操作符,与对应的LINQ相比,通过PLINQ可以获得明显的加速,但是具体的加速效果还要取决于具体的场景,不过在并行化的情况下一段会加速. 如果一个查询涉及到大量的计算和内存密集型操作,而且顺序并不重要,那么加速会非常明显,然而,如果顺序很重要,那么加

spring事物管理--声明式(AspectJ)(推荐使用)

1.表结构及数据 2.需引入的jar包: 3.业务层(Service).持久层(Dao)接口与实现类 Service接口: //转账案例业务层接口 public interface AccountService { /** * @param out :转出账号 * @param in :转入账号 * @param money :转账金额 */ public void transfer(String out,String in,Double money); } Service实现类: //转账案例

注解方式实现声明式事务管理

使用注解实现Spring的声明式事务管理,更加简单! 步骤: 1) 必须引入Aop相关的jar文件 2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类 3)在需要添加事务控制的地方,写上: @Transactional @Transactional注解: 1)应用事务的注解 2)定义到方法上: 当前方法应用spring的声明式事务 3)定义到类上:   当前类的所有的方法都应用Spring声明式事务管理; 4)定义到父类上: 当执行父类的方法时候应用事务. 修改bean

spring4声明式事务--01注解方式

1.在spring配置文件中引入 tx 命名空间 xmlns:tx="http://www.springframework.org/schema/tx" 2.配置事务管理器 <!-- 配置事物管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <p

Spring Cloud官方文档中文版-声明式Rest客户端:Feign

官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#spring-cloud-feign 文中例子我做了一些测试在:http://git.oschina.net/dreamingodd/spring-cloud-preparation Declarative REST Client: Feign 声明式Rest客户端:Feign Feign is a declarative web service client. It

声明式事务

加入jar包: com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar commons-logging-1.1.3.jar spring-aop-4.0.0.RELEASE.jar spring-aspects-4.0.0.RELEASE.jar spring-beans-4.0.

Spring声明式事务总结

Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSource.TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager. 具体如下图:

spring4声明式事务—02 xml配置方式

1.配置普通的 controller,service ,dao 的bean. <!-- 配置 dao ,service --> <bean id="bookShopDao" class="com.liujl.spring.tx.xml.BookShopDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplate"></propert

spring声明式事务配置详解

spring声明式事务配置详解 君子不器 2013年06月16日 编程世界 5273次阅读 查看评论 理解Spring的声明式事务管理实现 本节的目的是消除与使用声明式事务管理有关的神秘性.简单点儿总是好的,这份参考文档只是告诉你给你的类加上@Transactional注解,在配置文件中添加('<tx:annotation-driven/>')行,然后期望你理解整个过程是怎么工作的.此节讲述Spring的声明式事务管理内部的工作机制,以帮助你在面对事务相关的问题时不至于误入迷途,回朔到上游平静