首页

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

精选文章

Golang查看全文
线程协程的调度机制.png

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

切片不能使用“==”进行比较,所以切片不能作为map结构的Key…
Kubernetes查看全文
Large-scale cluster management at Google with Borg.pdf
Kubernetes因为在英文名称首字母k和尾字母s中间一共有8个字符,而简称为k8s,k8s最早源自google公司内部的borg项目。

k8s是一种容器编排技术,主要解决下列问题: 自动上线和回滚 k8s有完善的部署方案,可以对应用/配置进行分批上线,而确保不会同时终止所有的实例。在应用出现问题的时候,可以回滚到指定版本。 服务发现与负载均衡 k8s为容器提供了单独的IP地址(IPv4和IPv6双协议栈)以及DNS名称,可以实现负载均衡。 存储编排 k8s支持NFS、Ceph等文件系统以及AWS等公有云存储设施,可以实现自动挂载。 Secret和配置管理 k8s支持隐私配置。 自动装箱 根据资源需求或者其他约束条件,自动调节容器数量,实现水平扩缩容,更好的提高资源利用率。 批量执行 k8s可以管理批处理和CI工作负载,自动替换失效的容器,可以进行自我修复。 编排工具对比 名词解释 Pod pod是最小的调度单元,pod里面会包含若干个容器。 Deployment Deployment是pod的管理和控制单元,会通过自动扩缩容控制pod集群的数量。 Ingress Ingress管控pod的网络。 Namespace 通过namespace的命名空间可以把k8s集群分成若干个资源不共享的虚拟集群。 节点类型 K8S 集群将节点分为两类,Master节点和Worker节点。 Master节点的组件如下:

API Server,K8S的请求的入口服务。API Server负责接收来自客户端或者CLI命令行的所有请求,API Server根据用户的请求类型,会路由给其他组件,通知其他组件执行具体操作…
调度器【Golang】查看全文
一般情况下,线程/进程的调度是操作系统进行的,但是go语言的协程是语言层面实现的用户态线程,所以调度由go语言自己实现。

调度时机 go语言的调度器分为三种调度类型,主动调度,被动调度,以及抢占调度。 主动调度 协程可以主动让出执行权力,协程在进行函数调用的时候,编辑器依赖提前插入的检查代码判断该协程是否要被抢占,但如果协程是长时间执行的CPU密集型运行,协程是无法被抢占的,1.14之后,go依靠操作系统的信号机制进行强制抢占。 被动调度 go的协程在执行休眠,channel通道阻塞,网络IO阻塞,GC的时候会被动让出自己执行的权力。和主动调度不同的是,被动调度不会把G放入GMP的全局运行队列,因为当前G的状态是Gwaiting,而不是可运行状态。 抢占调度 go语言初始化的时候就会启动一个特殊的线程执行系统监控,系统监控每隔10ms会检查是否有准备就绪的网络协程,将其放到全局运行队列,同时还会判断当前协程是否执行时间过程过长,或者处于系统调用,如果是则会抢占当前的协程。 调度机制 Golang语言的调度机制称为GMP,GMP分为三种角色: G:Groutine协程,拥有运行函数的指针、栈、上下文(指的是sp、bp、pc等寄存器上下文以及垃圾回收的标记上下文),在整个程序运行过程中可以有无数个,代表一个用户级代码执行流(用户轻量级线程); P:Processor,调度逻辑处理器,同样也是Go中代表资源的分配主体(内存资源、协程队列等),默认为机器核数,可以通过GOMAXPROCS环境变量调整

M:Machine,代表实际工作的执行者,对应到操作系统级别的线程;M的数量会比P多…

热门分类

算法题库

精选内容