首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

UDP查看全文
UDP传输示意图.png
UDP是数据报文协议,是以数据包方式发送和接收报文。

和面向连接的TCP协议不同,UDP不需要保证传输的可靠性,所以UDP可以以更加恒定的速度发送数据,所以对很多需要时效的场景更加适用。 UDP提供尽最大努力的交付,不保证可靠交付。所有维护传输可靠性的工作需要用户在应用层来完成。没有TCP的确认机制、重传机制。如果因为网络原因没有传送到对端,UDP也不会给应用层返回错误信息。 UDP是面向报文的,对应用层交下来的报文,添加首部后直接乡下交付为IP层,既不合并,也不拆分,保留这些报文的边界。对IP层交上来UDP用户数据报,在去除首部后就原封不动地交付给上层应用进程,报文不可分割,是UDP数据报处理的最小单位。 和TCP相比,在传输协议方面,UDP可以设置的属性较少,不能控制读写数据的次数和数量。数据包的发送和接收都必须是一个整体。 因为UDP不需要保证可靠的传输,所以UDP在传输的生命周期中不需要处理建立连接,断开连接,重传等,不需要维护连接状态,也不需处理流量控制和拥塞控制,所以性能开销较少,传输效率较TCP较高。其实现非常简单,UDP的报文结构也非常简单。 UDP的报文结构简单,只包括传输端以及对端的地址/端口信息,以及报文,报文长度,报文的校验和。

和IP的检验和只校验数据包头部不同,UDP的校验和包括头部和数据部分。
SOA查看全文
SOA架构简化图.png
SOA是Service-Oriented Architecture的简称,最早是资讯公司Garnter在1996年提出的概念。

SOA架构是面向服务的,SOA继承了很多面向对象的特点,比如说面向对象的封装,经常代表很多同一实体的功能封装成一个模块,为其他对象调用者提供接口调用,良好的面向对象设计就是暴露接口,隐藏实现,SOA的设计同样需要明确服务定义,不同的是SOA的服务定义不是基于某一个编程语言或者平台的具像化定义,而是基于业务描述语言定义的服务接口,最终可以由不同的技术栈进行实现,SOA不同的模块之间也可以采用异构的技术体系,彼此直接通过远程调用的方式进行交互,或者是通过ESB进行数据交互。 SOA的服务一般提供标准稳定的接入服务,SOA服务作为封装好的功能模块,不同为微服务是服务研发团队内部的定位,SOA服务面向的是其他的业务团队,甚至组织架构之外的业务方,SOA服务之间体现了大型企业之间跨组织团队的信息协作和数据交互,这些模块之间已经形成了相互依赖的生态链条。所以服务的稳定性很重要,服务的描述一定要准确,稳定,避免频繁变更,而且SOA服务主要功能是作为功能模块对外提供服务,所以一般服务的粒度较粗,SOA服务承载更多的业务逻辑。 不同于微服务,微服务架构往往不能提供独立的业务功能,例如微服务的网关服务,不能独立提供有业务语义的功能,但是SOA服务提供的独立完整的业务接口,而且组成服务的构件都是独立部署并具有独立的上下文环境,SOA组件之间一般不存在强依赖关系,组件之间即使需要通信一般会采用ESB 消息总线等方式进行交互。 webservice

webservice是SOA架构中组件通常对外暴露的方式,webservice提供的服务一般通过Web服务描述语言…
Golang查看全文
线程协程的调度机制.png

简介 golang最早是google公司设计的一门开源语言,这门语言主要面向工程实践。 协程 协程是为了节约线程的内存占用以及上下文切换成本而推出的用户态线程,和进程/线程相比,协程更加轻量级。 进程/线程是由操作系统分配并且调度的,进程有单独的地址空间,有独立上下文,不同线程可以同享进程的地址空间以及资源,进程和线程都由操作系统调度,但是协程是用户态实现的类线程资源,由用户态完成调度,所以协程的调用栈比进程/线程更小,线程的调用栈一般是1M~10M,而协程一般仅1K~50K,而且用户态调度可以节约用户态和内核态切换,调度成本更小。 协程和线程/进程底层调度逻辑不同点主要如下: 协程调度不需要操作系统介入,是用户态来实现调度逻辑的,本质上Golang的协程框架实现了调度功能。 协程调度的时机一般发生在IO等需要阻塞的阶段,Golang的协程框架需要监听此类时间。 使用协程时候,IO机制一般使用异步机制。 GMP GMP是golang中协程的调度机制。 GC 切片 一般编程语言的数组都是静态大小的,由列表等数据结构提供动态大小的线性数据结构。但是Golang语言提供了可以自动扩容的动态数组——切片(Slice),切片支持追加,遍历,截取、随机访问等能力。 Golang也提供数组类型的数据结构,数组是长度是不可变化的,需要在声明数组的时候确定的长度的值,一般是传入明确的数组长度或者通过数组的值而确定数组的长度。 切片的声明和数组类似,但是不需要传入切片的长度,或者通过make方式构建,此时传入一个初始长度。

切片不能使用“==”进行比较,所以切片不能作为map结构的Key…

热门分类

算法题库

精选内容