事件驱动

Node1-1 NodeJS是什么?

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-28 15:28:41
Node.js is a JavaScript runtime built on Chrome's V8 Node.js uses an event-driven,non-blocking I/O model(事件驱动和IO模型) 非阻塞I/O (Input / Ouput) 阻塞I/O:I/O 时进程休眠等待I/O完成后进行下一步 非阻塞I/O:I/O时函数立即返回,进程不必等待I/O完成   疑问:所有的指令都可以理解为阻塞的,上一条执行完才能执行下一句,为什么单单把IO拿出来说?   简单来讲,指令依赖的都是CPU运算,CPU的运行速度时很快的,可以执行31条指令,非IO操作根本感觉不到阻塞的过程(拷贝电影的速度) IO结束后通知主程序------->事件驱动 事件驱动 I/O等异步操作结束后通知主进程 观察者模式 来源: https://www.cnblogs.com/chorkiu/p/11412575.html

Spring事件驱动模型和观察者模式

∥☆過路亽.° 提交于 2019-11-27 17:37:27
一、前言 spring cloud大行其道的当下,如果不了解基本原理那么是很纠结的(看见的都是 约定大于配置 ,但是原理呢?为什么要这么做?如何串联起来的?)。spring cloud是基于spring boot快速搭建的,今天咱们就看看spring boot容器启动流程(全文基于1.5.9版本)。(本文不讲解如何快速启动spring boot,那些直接官方看即可, 官网文档飞机票 ) 二、容器启动 spring boot一般是 指定容器启动main方法,然后以命令行方式启动Jar包 ,如下图: 1 @SpringBootApplication 2 public class Application { 3 public static void main(String[] args) { 4 SpringApplication.run(Application.class, args); 5 } 6 } 这里核心关注2个东西: 1.@SpringBootApplication注解 2. SpringApplication.run()静态方法 下面我们就分别探究这两块内容。 2.1 @SpringBootApplication注解 源码如下: 1 @Target(ElementType.TYPE) 2 @Retention(RetentionPolicy.RUNTIME) 3

六种常用的微服务架构设计模式 第四种模式

佐手、 提交于 2019-11-27 05:43:40
第四种模式: 分层API架构上事件驱动的状态管理 事件驱动并不是一个新的设计模式。许多ESB最初的设计模式就是一个事件驱动系统。当在微服务体系上实施事件驱动架构时,它能够提供一些强大的抽象。事件驱动系统通常使用某种类型的队列(类似于面向消息的系统),但是围绕队列所传递内容的设计和行为,强制执行一个标准;具体来说,就是事件。 人们经常将事件驱动模式与其他模式相混淆,因此在事件驱动模式中涵盖了大量的设计。严格地说,事件是关于过去发生的,具有相关代表性状态和时间戳的东西。事件允许接收它的服务通过按顺序重放事件来重建状态的物化视图。然而,在许多实现中,往往将事件(已经发生了的事情)与命令(让某件事情发生)混淆在一起。如果事件和命令不进行区分的话,架构设计的可预测性是有缺陷的。也就是说,不可否认,事件驱动的设计模式优于面向消息的方法(因为事件驱动的设计更为具体);但是由于事件驱动的设计模式缺乏一致性,在实现中往往会出现问题。但是,鼓励并执行一致标准的团队会发现,事件驱动的设计模式能够在微服务体系结构中工作得很好。 问题: 为了确保系统内数据的完整性,需要复制关键业务事件,以便在微服务或数据存储之间进行同步。 解决方案: 使用常见的事件抽象来表示系统中的发生变化的组件。 应用: 当业务发生改变时,将其封装成过去时的事件,并发送给相关方。业务中的更改就是发送和处理这些事件的产物。 影响: 1

Linux IO 概念(2)【转】

那年仲夏 提交于 2019-11-26 15:57:02
转自: https://www.cnblogs.com/qq289736032/p/9188455.html 在上一篇 IO底层的概念 中杂合了很多模糊的概念,受知识水平的限制,只是从网上抄了很多过来.从linux一切皆文件的设计哲学,介绍了文件描述符,从进程的运行内存分配,进程的切换,介绍了进程的阻塞,以及引出了阻塞IO. 在讲到阻塞IO的时,候受限于知识水平,也没有实际操作过,还是没有理解进程和IO函数的调用关系,IO又是如何操作磁盘,文件描述符又是怎样工作,进程怎么去拷贝字节流, 了解linuxIO的最终目的我是想知道JavaIO和JavaNIO在虚拟机中是如何调用的,虚拟机作为一个linux进程又是如何跟底层IO进行交互的.这些问题最终还是要去图书馆查阅书籍才能理解的更清楚, 下面继续在网络上搬迁别人家的博客 注:以下下文章整理自网络 阻塞IO 非阻塞IO 多路复用IO, 多路复用IO是为了处理多个IO问价句柄的数据操作,一个典型场景是当有很多socket服务监听不同端口以接收数据时,如果采用阻塞IO则需要多线程,每个线程和进程负责一个端口socket.但是,大量的线程和进程往往造成CPU的浪费 linuxIO多路复用技术提供一个单进程,单线程内监听多个IO读写时间的机制,其基本原理是各个IO将句柄设置为非阻塞IO,然后将各个IO句柄注册到linux提供的IO复用函数上

多线程、事件驱动与推荐引擎框架选型

社会主义新天地 提交于 2019-11-25 23:10:27
  事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。多线程是另一种常用编程范式,并且更容易理解。   高性能通用型C++网络框架 Nebula 是基于事件驱动的多进程网络框架(适用于即时通讯、数据采集、实时计算、消息推送等应用场景),已有即时通讯、埋点数据采集及实时分析的生产应用案例。经常有人问Nebula的每个进程里是单线程还是多线程的?又问为什么不用多线程?不用多线程又怎么处理并发问题?   最近 Nebula 将会用于一个新的生产项目——推荐引擎,在此之前团队已有使用某知名度较高的RPC框架多线程版推荐引擎(业界许多推荐引擎都用了目前比较知名的开源RPC框架来开发)。本文不做Nebula与各知名RPC框架的比较,也无意说明哪个框架更适合做推荐引擎,只说明Nebula可以用于推荐引擎,且有信心效果会很好。最终结果如何,等推荐引擎研发出来,拭目以待。   为什么是事件驱动而不是多线程?事件驱动无须多线程。我们先来回顾一下服务器编程范式。 1. 服务器程序设计范式   《UNIX网络编程》卷一里介绍了9种服务器设计范式:   九种服务器设计范式并不是全都有实用价值,在《UNIX网络编程》卷一最后一节里给出了几种TCP服务器设计范式代码示例: TCP并发服务器程序,每个客户一个子进程