首页
精选文章调度器【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多…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会通过观察者模式接受注册者的返回,继续后续的流程和逻辑。Influxdb查看全文Influxdb是知名的时序数据库产品。存储引擎 TSM 存储引擎主要由几个部分组成: cache、wal、tsm file、compactor。 Cache cache 相当于是 LSM Tree 中的 memtable,在内存中是一个简单的 map 结构,这里的 key 为 seriesKey + (#!~#)分隔符 + filedName,entry 相当于是一个按照时间排序的存放实际值的数组,具体结构如下:插入数据时,实际上是同时往 cache 与 wal 中写入数据,可以认为 cache 是 wal 文件中的数据在内存中的缓存。当 InfluxDB 启动时,会遍历所有的 wal 文件,重新构造 cache,这样即使系统出现故障,也不会导致数据的丢失。
目前的 cache 的设计有一个问题,当一个快照正在被写入一个新的 tsm 文件时,当前的 cache 由于大量数据写入,又达到了阀值,此时前一次快照还没有完全写入磁盘,InfluxDB 的做法是让后续的写入操作失败,用户需要自己处理,等待恢复后继续写入数据。 WAL wal 文件的内容与内存中的 cache 相同… |
热门分类开源Golang消息队列JavaJavascriptLinuxMysqlNLPPHP事务内存管理分布式理论分类存储常用存储开源软件操作系统画图网络编程数据库算法虚拟化前端存储理论常用算法微服务数据结构算法应用计算机原理中间件共识算法分布式分治动态规划容器并发排序架构组件绘图工具网络协议编程语言理论算法思想树缓存架构C++字符串算法工程思想搜索
算法题库精选内容 |