精华内容
下载资源
问答
  • 许多Dynamo节点的端口都有指定的...因为输入数据为列表,节点解析数据的过程中自行重复调用核心功能,并按照输入的数据层级关系来构建最终的输出结果。如最简单的A+B函数,当我们给A或者B其中之一输入数字列表(...

    e13a092c64be1478f05fa44c73ceb927.png

    许多Dynamo节点的端口都有指定的数据类型及其默认值。大多数情况下(除却某些List类的处理函数),当我们给端口传入列表数据时,Dynamo会自动分层解析输入数据直到获取与端口指定类型一致的数据,然后据此数据进行核心功能操作。因为输入数据为列表,节点会在解析数据的过程中自行重复调用核心功能,并按照输入的数据层级关系来构建最终的输出结果。如最简单的A+B函数,当我们给A或者B其中之一输入数字列表(可以是任意层级)时,其总能进行计算并返回结果。如下图所示:

    7566a016c622062c4850720b87daf5ba.png

    仅以两个数字的A+B功能为例,我们可以写一个Python Script来实现,其代码也很简单:

    import clr
    clr.AddReference('ProtoGeometry')
    from Autodesk.DesignScript.Geometry import *
    OUT = IN[0] + IN[1] 

    因为Python Script不支持设定输入数据类型及默认值,同时也不支持连缀等功能,这样的Python Script只能接受两个数字之间的运算,如果我们需要其中一个是列表怎么办?

    最显而易见的方式是修改Python Script代码,将输入强制转换成列表,而后再使用FOR循环来逐个处理。但这样会增加大量的代码,同时需要考虑输入都是纯数字时,依然需要保持代码能运行。很明显,更多的代码,等于更多的工作量,也可意味着更低的效率。那么有没有其他简单的解决方案呢?

    答案是有,使用自定义节点

    我们可以把整个Python Script转换成一个自定义节点。此时我们将列表接入IN端口,返回值将会是null。如下图所示:

    13ce7a0e4e7ddfb016b28cec9f5c4dcb.png

    下面就是展现魔力的时刻,首先我们双击打开自定义节点,修改其中的input节点内容为x:doubley:double,然后返回之前的DYN将会发现,节点可以自动处理列表数据了,包括有层级的列表而不用额外写任何代码!如下图所示:

    4f60876ac87f531659a85a6e1647eb3d.png

    虽然上面的例子仅仅是简单的数学运算,但是这种方式也可以在实际工程实践中进行应用,如构建处理单个曲线、曲面或者实体的代码为自定义节点,指定输入的数据类型为对应的曲线(Autodesk.DesignScript.Geometry.Curve)、曲面(Autodesk.DesignScript.Geometry.Surface)及实体(Autodesk.DesignScript.Geometry.Solid),然后可以给节点传递包含曲线、曲面和实体的数据列表直接获取最终结果。

    快速链接

    上一篇 《《《《《 应用秘籍目录 》》》》》下一篇

    展开全文
  • 前言 开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程...broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。 master queue:每个...

    前言

    开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时,往往眼花缭乱,不知所措。对于RabbitMQ和Kafka,到底应该选哪个?

    RabbitMQ架构

    RabbitMQ是一个分布式系统,这里面有几个抽象概念。

    • broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。

    • master queue:每个队列都分为一个主队列和若干个镜像队列。

    • mirror queue:镜像队列,作为master queue的备份。在master queue所在节点挂掉之后,系统把mirror queue提升为master queue,负责处理客户端队列操作请求。注意,mirror queue只做镜像,设计目的不是为了承担客户端读写压力。

    如上图所示,集群中有两个节点,每个节点上有一个broker,每个broker负责本机上队列的维护,并且borker之间可以互相通信。集群中有两个队列A和B,每个队列都分为master queue和mirror queue(备份)。那么队列上的生产消费怎么实现的呢?消息队列的应用场景可以看这篇文章《消息队列常见的几种使用场景介绍》

    队列消费

    如上图有两个consumer消费队列A,这两个consumer连在了集群的不同机器上。RabbitMQ集群中的任何一个节点都拥有集群上所有队列的元信息,所以连接到集群中的任何一个节点都可以,主要区别在于有的consumer连在master queue所在节点,有的连在非master queue节点上。

    因为mirror queue要和master queue保持一致,故需要同步机制,正因为一致性的限制,导致所有的读写操作都必须都操作在master queue上(想想,为啥读也要从master queue中读?和数据库读写分离是不一样的。),然后由master节点同步操作到mirror queue所在的节点。即使consumer连接到了非master queue节点,该consumer的操作也会被路由到master queue所在的节点上,这样才能进行消费。

    队列生产

    原理和消费一样,如果连接到非 master queue 节点,则路由过去。

    所以,到这里小伙伴们就可以看到 RabbitMQ的不足:由于master queue单节点,导致性能瓶颈,吞吐量受限。虽然为了提高性能,内部使用了Erlang这个语言实现,但是终究摆脱不了架构设计上的致命缺陷。

    Kafka

    说实话,Kafka我觉得就是看到了RabbitMQ这个缺陷才设计出的一个改进版,改进的点就是:把一个队列的单一master变成多个master,即一台机器扛不住qps,那么我就用多台机器扛qps,把一个队列的流量均匀分散在多台机器上不就可以了么?注意,多个master之间的数据没有交集,即一条消息要么发送到这个master queue,要么发送到另外一个master queue。

    这里面的每个master queue 在Kafka中叫做Partition,即一个分片。一个队列有多个主分片,每个主分片又有若干副分片做备份,同步机制类似于RabbitMQ。

    如上图,我们省略了不同的queue,假设集群上只有一个queue(Kafka中叫Topic)。每个生产者随机把消息发送到主分片上,之后主分片再同步给副分片。

    队列读取的时候虚拟出一个Group的概念,一个Topic内部的消息,只会路由到同Group内的一个consumer上,同一个Group中的consumer消费的消息是不一样的;Group之间共享一个Topic,看起来就是一个队列的多个拷贝。所以,为了达到多个Group共享一个Topic数据,Kafka并不会像RabbitMQ那样消息消费完毕立马删除,而是必须在后台配置保存日期,即只保存最近一段时间的消息,超过这个时间的消息就会从磁盘删除,这样就保证了在一个时间段内,Topic数据对所有Group可见(这个特性使得Kafka非常适合做一个公司的数据总线)。队列读同样是读主分片,并且为了优化性能,消费者与主分片有一一的对应关系,如果消费者数目大于分片数,则存在某些消费者得不到消息。

    由此可见,Kafka绝对是为了高吞吐量设计的,比如设置分片数为100,那么就有100台机器去扛一个Topic的流量,当然比RabbitMQ的单机性能好。

    总结

    本文只做了Kafka和RabbitMQ的对比,但是开源队列岂止这两个,ZeroMQ,RocketMQ,JMQ等等,时间有限也就没有细看,故不在本文比较范围之内。

    所以,别再被这些五花八门的队列迷惑了,从架构上找出关键差别,并结合自己的实际需求(比如本文就只单单从吞吐量一个需求来考察)轻轻松松搞定选型。最后总结如下:

    • 吞吐量较低:Kafka和RabbitMQ都可以。

    • 吞吐量高:Kafka。

    本文内容参考自RabbitMQ和KafKa官方文档,所以真要搞懂一个中间件的原理最好去看官方文档,文档里面有详细的设计方案,我们可以自己进行设计方案的对比,从而找出符合自己实际情况的中间件。

    推荐去我的博客阅读更多:

    1.Java JVM、集合、多线程、新特性系列教程

    2.Spring MVC、Spring Boot、Spring Cloud 系列教程

    3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

    4.Java、后端、架构、阿里巴巴等大厂最新面试题

    生活很美好,明天见~

    展开全文
  • 翻译一篇简单的文章学习下基础,此文...套接字是指运行在同一个网络中的两个程序之间(服务端程序和客户端程序进行来回通信(双向的)线路的终端节点C#里要用套接字应用通信我们需要有两个应用程序。一个服...

    翻译一篇简单的文章学习下基础,此文针对我等对socket只听说未尝试阶段的水平。

    How to C# Socket programming

    C#通过他的命名空间像System.Net和System.Net.Sockets简化网络编程。套接字是指运行在同一个网络中的两个程序之间(服务端程序和客户端程序)进行来回通信(双向的)线路的终端节点。在C#里要用套接字应用通信我们需要有两个应用程序。一个服务端程序(server)和一个客户端程序(client)。


    C#服务端套接字程序:C#服务端套接字程序运行在一台有绑定端口号并监听客户端请求的电脑上。
    C#客户端套接字程序:C#客户端套接字程序必须得知道运行服务端套接字程序电脑的ip地址(或主机名)和指定监听客户端请求
    的端口号。
    一旦服务端和客户端的连接建立,他们便可以通过他们的套接字进行通信(读和写)。

    在C#里用来套接字编程的通信协议有两种类型,他们分别是TCP/IP(传输控制协议/网际协议)通信,UDP/IP(用户数据报文协议/网际协议)通信。
    在接下来的部分我们将在服务端套接字程序和客户端套接字程序之间使用tcp/ip通信协议进行通信。


    以上图片展示了服务端和客户端进行通信的界面。
    C#服务端套接字程序:服务端套接字程序通过C#控制台程序运行。这里的服务端监听着客户端的请求,并且当C#服务端获得客户端套接字的请求时,服务端向客户端发出一个响应。点击下面的链接查看服务端套接字程序的详细信息。

    C#客户端套接字程序:C#客户端套接字程序是一个窗体程序。当客户端程序执行时,他将建立到服务端程序的链接并向服务端发出请求,同时他也接受来自服务端的响应。点击下面的链接查看客户端套接字编程的详细信息。

    如何运行该程序?
    这个C#套接字程序有两部分组成。
    1、服务端套接字程序
    2、客户端套接字程序
    当你完成编码并生成服务端和客户端程序后,首先你必须从命令提示符中启动C#服务套接字程序,然后在你的服务程序正在运行的地方也就是DOS窗口里你将获得一个服务已启动的消息。
    下一步就是在同一个网络里的同一台台电脑或其他的电脑上启动客户端套接字程序。当你启动客户端套接字程序时,他会建立到服务端的链接并在客户端窗口里显示客户端已启动的消息。同时你会在服务端的窗口里看到,已经接受来自客户端的链接的消息。

    现在你的服务端套接字程序和客户端套接字程序已经建立连接并可以通信了。如果你想使服务端和客户端再次进行通信,点击客户端程序的按钮,然后你会看到新的消息显示在服务端和客户端的程序里。

    入门级:怎么使用C#进行套接字编程(二)

    展开全文
  • 前言开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其...broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。master queue:每个队列都分为一个主队列...

    前言

    开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时,往往眼花缭乱,不知所措。

    对于RabbitMQ和Kafka,到底应该选哪个?

    RabbitMQ架构

    RabbitMQ是一个分布式系统,这里面有几个抽象概念。

    • broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。

    • master queue:每个队列都分为一个主队列和若干个镜像队列。

    • mirror queue:镜像队列,作为master queue的备份。在master queue所在节点挂掉之后,系统把mirror queue提升为master queue,负责处理客户端队列操作请求。注意,mirror queue只做镜像,设计目的不是为了承担客户端读写压力。

    如上图所示,集群中有两个节点,每个节点上有一个broker,每个broker负责本机上队列的维护,并且borker之间可以互相通信。集群中有两个队列A和B,每个队列都分为master queue和mirror queue(备份)。

    那么队列上的生产消费怎么实现的呢?消息队列的应用场景可以看这篇文章《消息队列常见的几种使用场景介绍

    队列消费

    如上图有两个consumer消费队列A,这两个consumer连在了集群的不同机器上。

    RabbitMQ集群中的任何一个节点都拥有集群上所有队列的元信息,所以连接到集群中的任何一个节点都可以,主要区别在于有的consumer连在master queue所在节点,有的连在非master queue节点上。

    因为mirror queue要和master queue保持一致,故需要同步机制,正因为一致性的限制,导致所有的读写操作都必须都操作在master queue上(想想,为啥读也要从master queue中读?和数据库读写分离是不一样的。),然后由master节点同步操作到mirror queue所在的节点。即使consumer连接到了非master queue节点,该consumer的操作也会被路由到master queue所在的节点上,这样才能进行消费。

    队列生产

    原理和消费一样,如果连接到非 master queue 节点,则路由过去。

    关注微信公众号:Java技术栈,在后台回复:架构,可以获取我整理的 N 篇最新架构教程,都是干货。

    所以,到这里小伙伴们就可以看到 RabbitMQ的不足:由于master queue单节点,导致性能瓶颈,吞吐量受限。虽然为了提高性能,内部使用了Erlang这个语言实现,但是终究摆脱不了架构设计上的致命缺陷。

    Kafka

    说实话,Kafka我觉得就是看到了RabbitMQ这个缺陷才设计出的一个改进版,改进的点就是:把一个队列的单一master变成多个master,即一台机器扛不住qps,那么我就用多台机器扛qps,把一个队列的流量均匀分散在多台机器上不就可以了么?注意,多个master之间的数据没有交集,即一条消息要么发送到这个master queue,要么发送到另外一个master queue。

    这里面的每个master queue 在Kafka中叫做Partition,即一个分片。一个队列有多个主分片,每个主分片又有若干副分片做备份,同步机制类似于RabbitMQ。

    如上图,我们省略了不同的queue,假设集群上只有一个queue(Kafka中叫Topic)。每个生产者随机把消息发送到主分片上,之后主分片再同步给副分片。

    队列读取的时候虚拟出一个Group的概念,一个Topic内部的消息,只会路由到同Group内的一个consumer上,同一个Group中的consumer消费的消息是不一样的;Group之间共享一个Topic,看起来就是一个队列的多个拷贝。

    所以,为了达到多个Group共享一个Topic数据,Kafka并不会像RabbitMQ那样消息消费完毕立马删除,而是必须在后台配置保存日期,即只保存最近一段时间的消息,超过这个时间的消息就会从磁盘删除,这样就保证了在一个时间段内,Topic数据对所有Group可见(这个特性使得Kafka非常适合做一个公司的数据总线)。队列读同样是读主分片,并且为了优化性能,消费者与主分片有一一的对应关系,如果消费者数目大于分片数,则存在某些消费者得不到消息。

    由此可见,Kafka绝对是为了高吞吐量设计的,比如设置分片数为100,那么就有100台机器去扛一个Topic的流量,当然比RabbitMQ的单机性能好。

    总结

    本文只做了Kafka和RabbitMQ的对比,但是开源队列岂止这两个,ZeroMQ,RocketMQ,JMQ等等,时间有限也就没有细看,故不在本文比较范围之内。

    所以,别再被这些五花八门的队列迷惑了,从架构上找出关键差别,并结合自己的实际需求(比如本文就只单单从吞吐量一个需求来考察)轻轻松松搞定选型。最后总结如下:

    • 吞吐量较低:Kafka和RabbitMQ都可以。

    • 吞吐量高:Kafka。

    本文内容参考自RabbitMQ和KafKa官方文档,所以真要搞懂一个中间件的原理最好去看官方文档,文档里面有详细的设计方案,我们可以自己进行设计方案的对比,从而找出符合自己实际情况的中间件。

    作者:haolujun

    https://www.cnblogs.com/haolujun/p/9632835.html

    - END -

    推荐阅读:

    1、歪国人整理的 2019 年 Java 开发路线图

    2、Spring Boot 之配置导入,强大到不行

    3、Spring Boot 2.2.1 发布,一个有点坑的版本

    4、不用 Notepad++,还有更牛逼的选择

    5、分享一份 2019 最新 Java 架构师学习资料

    关注Java技术栈公众号在后台回复:Java,可获取一份栈长整理的最新 Java 技术干货。

    点击「阅读原文」和栈长学更多~

    展开全文
  • 很奇怪,xmipp3.0进行作业提交的时候,只有一个选项:Number of MPI processes如果你把它理解成节点数目(Number of MPI processes=7),那么它的脚本cl2d_run_001.py中会有这么一行:NumberOfMpi = 7.这样的话,...
  • 一.从零写单链表的算法之尾部&头部插入节点

    万次阅读 多人点赞 2018-01-28 19:36:31
    一.链表的引入 1.链表是怎么来的? 了解链表的来路之前,需要知道数组的缺陷...譬如我刚开始定了一个元素个数是10,后来程序运行时觉得不够因此动态扩展为20.普通的数组显然不行,我们可以对数组进行封装以达到这
  • 该项目是使用版本11.1.4生成的。 :cloud_selector: 天气...为了开发该项目,首先对屏幕进行建模,然后制作最终的应用程序模板。 空白页 完成页面 API数据 错误页面 图示 该应用程序中使用的图标取自 API 用于检索天
  • 数据倾斜:map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key...
  • RabbitMQ和Kafka到底怎么选?...broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。 master queue:每个队列都分为一个主队列和若干个镜像队列。 mirror queue:
  • RabbitMQ和kafka怎么

    2019-11-05 10:54:24
    开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时... broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。 master queue:...
  • 对事件进行处理程序或函数,我们称之为事件处理程序(也有教材上说是事件句柄)。 事件的分类(有的地方说是事件源分类法分出的,这个个人不赞同,两个是不同的东西怎么可以这么搞): 鼠标事件: 当用户页面上用...
  • 比特币是运行在区块链平台上的应用程序,区块链被认为是比特币背后的技术。区块链提供了一个分布式的交易账本,账本上的每个交易都会被维护节点进行加密和验证。如果你想要破解区块链的分布式账本,你需要劫持所有...
  • 开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时... broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。 master queue:...
  • ROS是分布式的节点,这样的话我们就可以将程序运行上的节点放到大型机器上面,分担机器人运行的压力。接下来我们来看一下怎么实现分布式通讯,怎么在多机上运行统一的程序。 ROS是一种分布式软件框架,节点之间通过...

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

在节点进行怎么程序运行