随笔分类 -  Scala

上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 14 下一页
JVM编程语言
摘要:上一篇讨论里我们介绍了几种任务分配(Routing)模式。Akka提供的几种现成智能化Routing模式大多数是通过对用户屏蔽具体的运算Routee选择方式来简化Router使用,提高智能程度,所以我们提到Router的运算是一种无序的运算,消息之间绝对不容许任何形式的依赖,因为向Router发送的 阅读全文
posted @ 2017-06-05 16:17 雪川大虫 阅读(1396) 评论(0) 推荐(0)
摘要:Actor模式最大的优点就是每个Actor都是一个独立的任务运算器。这种模式让我们很方便地把一项大型的任务分割成若干细小任务然后分配给不同的Actor去完成。优点是在设计时可以专注实现每个Actor的功能,在实际运算时由于每个Actor都在独立的线程里运行,能充分利用多核CPU的优势实现相似并行运算 阅读全文
posted @ 2017-05-31 17:42 雪川大虫 阅读(3834) 评论(3) 推荐(2)
摘要:在上一篇讨论中我们谈到了监管:在Akka中就是一种直属父子监管树结构,父级Actor负责处理直属子级Actor产生的异常。当时我们把BackoffSupervisor作为父子监管方式的其中一种。实际上BackoffSupervisor与定义了supervisorStrategy的Actor有所不同。 阅读全文
posted @ 2017-05-29 19:36 雪川大虫 阅读(2037) 评论(3) 推荐(1)
摘要:在开始讨论Akka中对Actor的生命周期管理前,我们先探讨一下所谓的Actor编程模式。对比起我们习惯的行令式(imperative)编程模式,Actor编程模式更接近现实中的应用场景和功能测试模式。这是因为Actor是靠消息来驱动的,每种消息代表一项功能的运算指令。由于消息驱动式的程序是松散耦合 阅读全文
posted @ 2017-05-24 12:26 雪川大虫 阅读(4493) 评论(2) 推荐(1)
摘要:Akka是由各种角色和功能的Actor组成的,工作的主要原理是把一项大的计算任务分割成小环节,再按各环节的要求构建相应功能的Actor,然后把各环节的运算托付给相应的Actor去独立完成。Akka是个工具库(Tools-Library),不是一个软件架构(Software-Framework),我们 阅读全文
posted @ 2017-04-29 17:08 雪川大虫 阅读(4865) 评论(11) 推荐(0)
摘要:前一段时间一直沉浸在函数式编程模式里,主要目的之一是掌握一套安全可靠的并发程序编程方法(concurrent programming),最终通过开源项目FunDA实现了单机多核CPU上程序的并行运算。但是,虽然通过在终端实现并行运算能充分利用多核CPU的计算能力把数据处理运算分布到前台可以大大减轻后 阅读全文
posted @ 2017-04-25 10:26 雪川大虫 阅读(19376) 评论(5) 推荐(5)
摘要:如果你是一个Slick用户,或者你是一个数据库编程人员正在尝试进入函数式编程模式,那么FunDA可能会帮到你。 目前市面上FRM(Functional Relational Mapper),即函数式的数据库处理工具库的选择并不多,Typesafe公司的Slick可能是最通用的选择了。整体上来说:Sl 阅读全文
posted @ 2017-04-08 21:31 雪川大虫 阅读(1009) 评论(0) 推荐(0)
摘要:作为一个能安全运行的工具库,为了保证占用资源的安全性,对异常处理(exception handling)和事后处理(final clean-up)的支持是不可或缺的。FunDA的数据流FDAPipeLine一般是通过读取数据库数据形成数据源开始的。为了保证每个数据源都能被安全的使用,FunDA提供了 阅读全文
posted @ 2017-04-02 15:55 雪川大虫 阅读(409) 评论(0) 推荐(0)
摘要:在对上两篇讨论中我们介绍了并行运算的两种体现方式:并行构建数据源及并行运算用户自定义函数。我们分别对这两部分进行了示范。本篇我准备示范把这两种情况集成一体的并行运算模式。这次介绍的数据源并行构建方式也与前面描述的有所不同:在前面讨论里我们预知需要从三个独立流来并行构建数据源。但如果我们有一个不知长度 阅读全文
posted @ 2017-03-31 17:48 雪川大虫 阅读(448) 评论(0) 推荐(0)
摘要:FunDA的并行运算施用就是对用户自定义函数的并行运算。原理上就是把一个输入流截分成多个输入流并行地输入到一个自定义函数的多个运行实例。这些函数运行实例同时在各自不同的线程里同步运算直至耗尽所有输入。并行运算的具体函数实例数是用fs2-nondeterminism的算法根据CPU内核数、线程池配置和 阅读全文
posted @ 2017-03-30 17:57 雪川大虫 阅读(379) 评论(0) 推荐(0)
摘要:FunDA的并行数据库读取功能是指在多个线程中同时对多个独立的数据源进行读取。这些独立的数据源可以是在不同服务器上的数据库表,又或者把一个数据库表分成几个独立部分形成的独立数据源。当然,并行读取的最终目的是提高程序的运算效率。在FunDA中具体的实现方式是对多个独立的数据流进行并行读取形成一个统一综 阅读全文
posted @ 2017-03-26 16:36 雪川大虫 阅读(448) 评论(0) 推荐(0)
摘要:FunDA是一种函数式的编程工具,它所产生的程序是由许多功能单一的细小函数组合而成,这些函数就是用户自定义操作函数了。我们在前面曾经提过FunDA的运作原理模拟了数据流管道。流元素在管道流动的过程中被使用或者更新。在管道中流动的元素都必须继承FDAROW类型,可以细分成几个大类: 1、数据行(dat 阅读全文
posted @ 2017-03-21 12:35 雪川大虫 阅读(574) 评论(0) 推荐(0)
摘要:FunDA设计的主要目的是解决FRM(Functional Relation Mapping)如Slick这样的批次型操作工具库数据源行间游动操作的缺失问题。FRM产生的结果集就是一种静态集合,缺乏动态更新操作方式。FunDA提出的解决方案是把FRM产生的静态集合转变成动态流(stream),流内元 阅读全文
posted @ 2017-03-01 20:37 雪川大虫 阅读(439) 评论(0) 推荐(0)
摘要:FunDA最重要的设计目标之一就是能够实现数据库操作的并行运算。我们先重温一下fs2是如何实现并行运算的。我们用interleave、merge、either这几种方式来同时处理两个Stream里的元素。interleave保留了固定的交叉排列顺序,而merge和either则会产生不特定顺序,这个 阅读全文
posted @ 2017-02-20 14:37 雪川大虫 阅读(743) 评论(0) 推荐(0)
摘要:前面我们提过:FunDA就像一个管道(PipeLine)。管道内流动着一串数据(Data)或者运算指令(Action)。管道的源头就是能产生纯数据的数据源(Source),跟着在管道的中间会有一些节点(WorkNode),我们可以在这些节点施用(apply)用户提供的功能函数(Task)。用户功能函 阅读全文
posted @ 2017-02-16 08:21 雪川大虫 阅读(362) 评论(0) 推荐(0)
摘要:上篇我们讨论了静态数据源(Static Source, snapshot)。这种方式只能在预知数据规模有限的情况下使用,对于超大型的数据库表也可以说是不安全的资源使用方式。Slick3.x已经增加了支持Reactive-Streams功能,可以通过Reactive-Streams API来实现有限内 阅读全文
posted @ 2017-02-14 11:33 雪川大虫 阅读(421) 评论(0) 推荐(0)
摘要:我们在前面用了许多章节来讨论如何把数据从后台数据库中搬到内存,然后进行逐行操作运算。我们选定的解决方案是把后台数据转换成内存中的数据流。无论在打开数据库表或从数据库读取数据等环节都涉及到对数据库表这项资源的安全使用:我们最起码要保证在完成使用或者使用中途出现错误异常退出时能释放占用的资源。谈到资源使 阅读全文
posted @ 2017-02-10 08:36 雪川大虫 阅读(327) 评论(0) 推荐(0)
摘要:Reactive-Stream不只是简单的push-model-stream, 它还带有“拖式”(pull-model)性质。这是因为在Iteratee模式里虽然理论上由Enumerator负责主动推送数据,实现了push-model功能。但实际上Iteratee也会根据自身情况,通过提供callb 阅读全文
posted @ 2017-02-06 15:04 雪川大虫 阅读(361) 评论(0) 推荐(0)
摘要:在上一节我们介绍了Iteratee。它的功能是消耗从一些数据源推送过来的数据元素,不同的数据消耗方式代表了不同功能的Iteratee。所谓的数据源就是我们这节要讨论的Enumerator。Enumerator是一种数据源:它会根据下游数据消耗方(Iteratee)的具体状态主动向下推送数据元素。我们 阅读全文
posted @ 2017-02-02 12:07 雪川大虫 阅读(357) 评论(0) 推荐(0)
摘要:FunDA的设计目标就是把后台数据库中的数据搬到内存里,然后进行包括并行运算的数据处理,最后可能再对后台数据库进行更新。如果需要把数据搬到内存的话,那我们就必须考虑内存是否能一次性容纳所有的数据,有必要配合数据处理分部逐步读入,这就是Reactive Stream规范主要目的之一。所以在设计FunD 阅读全文
posted @ 2017-01-31 10:18 雪川大虫 阅读(453) 评论(0) 推荐(0)

上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 14 下一页