首页
精选文章CompletableFuture【Java】查看全文CompletableFuture是Java异步编程中常用的类,CompletableFuture 继承了 Future 和 CompletionStage 两个接口,Future接口提供了 CompletableFuture 对结果的异步处理能力,CompletionStage 则提供了流式处理的能力,方便对异步流程进行关联组合和流式处理。Future是Java语言中非常重要的异步类,其语义类似于调用中的凭证和票据,在异步场景下,调用方之行调用之后获取Future就可以直接返回,调用Future获取结果的时候,如果结果还没有返回,会进入阻塞状态,直至可以获取返回结果。 Future经常用于多个请求的并行调用,因为Future的异步机制可以将该类调用的耗时从多个请求的耗时之和变为最长的耗时。 Future的缺点在于多个Future不能进行组合以及串联,Future在阻塞的获取结果之前没办法进行其他的操作,Future也缺少异常处理机制。 通过引入CompletionStage,CompletableFuture具备了流失处理的总总能力。 CompletableFuture利用了CompletionStage实现了顺序结构,组合结构以及回调结构。主要的API如下所示: CompletableFuture通过组合和顺序关系会形成一个树状的结构。 内层的CompletableFuture会注册到外层的CompletableFuture,同一个外层CompletableFuture的注册者会构成一个链表实现的栈结构。外层的CompletableFuture会通过观察者模式接受注册者的返回,继续后续的流程和逻辑。事件驱动查看全文程序的范式可以分为同步模型和异步模型。同步模型一般是指请求<->响应模式,调用方同步请求下游,并且阻塞等待结果。同步模型一般用于短耗时,低并发的场景,因为同步模型一般需要一个线程/协程等待结果的返回,所以在高并发场景下线程等资源会成为系统瓶颈。 在耗时较长的情况下,线程需要等待的时间较长,可以用轮询的方式定期去下游查询结果,避免一个线程长期用于等待结果。 但是如果在高并发场景下,需要轮询大量的数据,对服务器能力的压力较大。这个时候就需要引入异步的编程模型。 异步模型 异步编程可以下列几种模型: 消息驱动,消息驱动是目前微服务架构下常用的异步模型,消息驱动分为生产者,队列,消费者,生产者发送消息到队列,通过推或者拉的方式消费者可以异步的消费这些消息。 事件驱动,事件和消息的区别,只是事件做了一些结构化的封装。例如一般情况下事件会根据业务场景的不同而区分为不同的事件,每个事件的关注者也只会消费特定类型的事件。 流模式,流是一组有序的无界事件或数据,一般和消息/事件区别是通信方式,消息/事件一般都是离散的,通过推或者轮询拉的方式获取数据,流模式一般通过固定的长链接链路推送大量数据。 以上三种模式并没有严格的界限,比如消息驱动架构下,可以将不同类型的消息发送到不同的队列,其实也可以算是结构化的事件。而把不同的事件放在一起,形成事件总线也类似消息。同时消息和事件也可以通过长链接的方式推动给下游进行消费。 事件驱动不仅仅可以用于业务研发中异步化我们都业务逻辑,在基础组件中也承担重要的作用。 Reactor Reactor是网络编程领域著名的并发模型,将网络编程转换为一个个需要处理的事件,例如OnAccept,OnWrite…MediaWiki查看全文Wiki是一种在万维网上开放且可供多人协同创作的超文本系统,Howard G. Cunningham于1995年实现了世界上第一个Wiki系统——波特兰模式知识库,该系统最早是为了方便模式社区的交流而搭建。在搭建该系统的过程中,Howard提出了Wiki的概念,Howard将wiki定义为“一种允许一群用户用简单的描述来创建和连接一组网页的社会计算系统”。波特兰模式知识库在发展过程中,发展出了一系列辅助写作的工作,而且网络上也出现了各种模仿者,其中最出名的模仿者是维基百科。 MediaWiki用PHP语言编写,最初是为维基百科量身打造的自由开源的wiki套件。目前非营利的维基媒体基金会下辖的所有wiki项目以及MediaWiki都建基于此套软件上。此外还有大量Wiki软件基于MediaWiki搭建。 MediaWiki的语法和普通的Html是有区别的,编写更为简单,但是表现能力比Html较弱,但是MediaWiki的语法可以混合Html标签。 表现能力 MediaWiki的语法提供了以下内容的语法。 扩展能力 架构 安装 源码安装 MediaWiki的源码可以从两个渠道获取, release版本可以从网站官网下载,目前最新的版本是1.3.8。 其他非release版本可以从git仓库下载。 需要注意的是git库下载的非release版本的代码只包括核心部分代码,扩展例如extends和skins文件夹的内容均为空,需要自行下载进行扩展。 MediaWiki的扩展可以从官网的扩展分类页面查询,对应的皮肤在皮肤分类页。 软件依赖 MediaWiki至少依赖php运行环境和一款web服务器… |
热门分类开源Golang消息队列JavaJavascriptLinuxMysqlNLPPHP事务内存管理分布式理论分类存储常用存储开源软件操作系统画图网络编程数据库算法虚拟化前端存储理论常用算法微服务数据结构算法应用计算机原理中间件共识算法分布式分治动态规划容器并发排序架构组件绘图工具网络协议编程语言理论算法思想树缓存架构C++字符串算法工程思想搜索
算法题库
精选内容 |