分布式任务系统cronsunTechnology 分布式任务系统 cronsun 苏创绩 @Copyright Sunteng Technology 目录 01 任务系统 02 分布式任务系统 03 cronsun 04 心得体会 @Copyright Sunteng Technology Part One 01 任务系统 @Copyright Sunteng Technology 任务 1. 什么时间 什么时间 2. 什么地点 3. 做什么事 @Copyright Sunteng Technology 一个简单的任务 0 8 * * * echo "Hello Gophers!" @Copyright Sunteng Technology cron crond crontab cmd1 cmd2 cmd3 ... @Copyright @Copyright Sunteng Technology 早期的 cron V7,1979 1. 在Version 7 Unix里是一个系统服务 2. 只用 root 运行任务 3. 算法简单直接 @Copyright Sunteng Technology 早期的 cron 运行逻辑 1. 读 /usr/lib/crontab 文件 2. 如果有命令要在当前时间执行,就用0 码力 | 48 页 | 1.52 MB | 1 年前3
基于 mesos 的容器调度框架2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 1/36 基于 mesos 的容器调度框架 Gopher 杭州 meetup 5 August 2017 黄励博(huangnauh) 又拍云 2017/8/3 基于 mesos 的容器调度框架 http://go-talks http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 2/36 What's Upone 2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 3/36 Mesos 介绍 Image credit: mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 4/36 Mesos 调度 各个 Agent 启动后, 向 Master 注册,携带统计资源, 由 Master 决定给每个框架多少资源, 默认 采用分级主导资源公平算法 每个框架收到资源后, 根据自身任务需求, 调度任务的资源分配0 码力 | 36 页 | 2.49 MB | 1 年前3
2.2.3 Go语言的抢占式调度Go 语⾔的抢占式调度 曹春晖 资深 Gopher ⽬ 录 Go 程序的启动 01 GMP 的本质 02 调度循环的实现 03 ⽼版本的抢占实现 04 新版本的抢占实现 05 当前的 Go 语⾔还有哪些问题 06 Go 程序的启动 第⼀部分 编译过程 Go 程序 hello.go 的编译过程: ⽂本 -> 编译 -> ⼆进制可执⾏⽂件 编译过程 编译:⽂本代码 -> 程序启动后创建的第⼀个线程; 获 取 CPU 核 ⼼ 数 初 始 化 内 置 数 据 结 构 开 始 执 ⾏ ⽤ 户 main 函 数 从这⾥开始 进⼊调度循环 GMP 的本质 第⼆部分 G、M、P 的本质 G:goroutine,⼀个计算任务。由需要执⾏的代码和其上下⽂组成,上下⽂ 包括:当前代码位置,栈顶、栈底地址,状态等。 M:machine,系统线程,执⾏实体,想要在 CPU 上执⾏代码,必须有线 才能执⾏代码,否则必须陷⼊休 眠(后台监控线程除外),你也可以将其理解为⼀种 token,有这个 token,才 有在物理 CPU 核⼼上执⾏的权⼒。 G、P、M 的全局⼤图 调度循环的实现 第三部分 调度循环 在这⾥输⼊标题 https://www.figma.com/proto/JYM6TcdzBx7WtanhcJX0rP/bootstrap-Copy?page-id=5106%3A2&node-0 码力 | 44 页 | 7.43 MB | 1 年前3
1.6 resource scheduling & container technology for financial service_yujun务。 ② Condor采用集中式调度模式,且不能保障用户服务质量。 ③ 最小完成时间算法MCT(Minimum Completion Time)是以任意的顺序将任务映射到具有最早完成时间的主机上, 它并不保证任务被指派到执行它最快的主机上,而仅关心如何最小化任务完成时间,因而可能导致任务在资源上的 运行时间过长,从而潜在地增加了调度跨度。 ④ Min-Min算法, Min-Min算法,利用MCT矩阵,首先分别找到能够最短完成该任务的机器及最短完成时间,然后在所有的最短完成 时间中找出最小的最短完成时间对应的任务。Min-Min算法存在着一个很大的缺点,就是算法的资源负载均衡性能 (Load Balancing)不高。 ⑤ Max-Min算法与Min-Min算法相似,都是将任务指派给具有最小预测完成时间的主机,不同的是Max-Min算法从 所有任务的最小完成时间中选取一个最大值 所有任务的最小完成时间中选取一个最大值,然后进行相应任务。主机映射,之后重复此过程直至待调度任务集合 为空。 ⑥ 轮询调度(Round Robin Scheduling)算法就是以轮询的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。轮叫调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和响 应速度。该算法相对简单,不适用于服务0 码力 | 21 页 | 27.20 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版最差、最佳、平均时间复杂度 某些算法的时间复杂度不是固定的,而是与输入数据的分布有关。例如,假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,但元素顺序是随机打乱的;算法的任务是返回元素 1 的索引。我们可 以得出以下结论: ‧ 当 nums = [?, ?, ..., 1] ,即当末尾元素是 1 时,需要完整遍历数组,此时达到 最差时间复杂度 ?(?) 。 ‧ 当 算法:在缓存淘汰算法(LRU)中,我们需要快速找到最近最少使用的数据,以及支持快速地添 加和删除节点。这时候使用双向链表就非常合适。 循环链表常被用于需要周期性操作的场景,比如操作系统的资源调度。 ‧ 时间片轮转调度算法:在操作系统中,时间片轮转调度算法是一种常见的 CPU 调度算法,它需要对一 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环的操作就可以通过循环链表来实现。 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序依次处理队列中的订单。在双十一 期间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等。 队列在这些场景中可以有效地维护处理顺序。 5.3. 双向队列 对于队列,我们仅能在头部删除或在尾部添加元素。然而,「双向队列 Deque」提供了更高的灵活性,允许 在头部和尾部执行元素的添加或删除操作。0 码力 | 347 页 | 27.40 MB | 1 年前3
Hello 算法 1.0.0 Golang版够完成简单算 法的复杂度分析。 2.2 迭代与递归 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 2.2.1 迭代 「迭代 iteration」是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某 段代码,直到这个条件不再满足。 求和函数的递归过程 虽然从计算角度看,迭代与递归可以得到相同的结果,但它们代表了两种完全不同的思考和解决问题的范 式。 ‧ 迭代:“自下而上”地解决问题。从最基础的步骤开始,然后不断重复或累加这些步骤,直到任务完成。 ‧ 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。 以上述求和函数为例,设问题 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 适用于子问题分解,如树、图、分治、回溯等,代码结构简洁、 清晰 � 如果感觉以下内容理解困难,可以在读完“栈”章节后再来复习。 那么,迭代和递归具有什么内在联系呢0 码力 | 382 页 | 17.60 MB | 1 年前3
Hello 算法 1.0.0b5 Golang版步的了解,以便能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在数据结构与算法中,重复执行某个任务是很常见的,其与算法的复杂度密切相关。而要重复执行某个任务, 我们通常会选用两种基本的程序结构:迭代和递归。 2.2.1 迭代 「迭代 iteration」是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某 段代码,直到这个条件不再满足。 1. for 求和函数的递归过程 虽然从计算角度看,迭代与递归可以得到相同的结果,但它们代表了两种完全不同的思考和解决问题的范 式。 ‧ 迭代:“自下而上”地解决问题。从最基础的步骤开始,然后不断重复或累加这些步骤,直到任务完成。 ‧ 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。 以上述的求和函数为例,设问题 最差、最佳、平均时间复杂度 算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 ‧ 当 nums = [?, ?, ..., 1] ,即当末尾元素是 1 时,需要完整遍历数组,达到最差时间复杂度 ?(?) 。 ‧ 当 nums0 码力 | 379 页 | 30.70 MB | 1 年前3
Golang 入门笔记中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。 代码示例 语言函数 概述 函数是基本的代码块,用于执行一个任务。 Go 语言最少有个 main() 函数。 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。 函数声明(函数签名)告诉了编译器函数的名称,返回类型,和参数。 Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。 [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 案例:数组打印和初始化 多维数组 案例 指针 定义 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。 Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。 什么是指针? 一个指针变量指向了一个值的内存地址。 指针的使用流程 1. 定义指针变量。 2. 为指针变量赋值。 { Error() string } 并发 Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。 goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。 goroutine 语法格式: go 函数名 (参数列表) 例子: go f(x, y, z) 通道(channel) 通道缓冲区 Go 遍历通道与关闭通道0 码力 | 2 页 | 511.29 KB | 1 年前3
Hello 算法 1.1.0 Go版能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 2.2.1 迭代 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 代码,直到这个条件不再满足。 求和函数的递归过程 虽然从计算角度看,迭代与递归可以得到相同的结果,但它们代表了两种完全不同的思考和解决问题的范 式。 ‧ 迭代:“自下而上”地解决问题。从最基础的步骤开始,然后不断重复或累加这些步骤,直到任务完成。 ‧ 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。 以上述求和函数为例,设问题 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 适用于子问题分解,如树、图、分治、回溯等,代码结构简洁、 清晰 Tip 如果感觉以下内容理解困难,可以在读完“栈”章节后再来复习。 那么,迭代和递归具有什么内在联0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Go 版能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 2.2.1 迭代 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 代码,直到这个条件不再满足。 求和函数的递归过程 虽然从计算角度看,迭代与递归可以得到相同的结果,但它们代表了两种完全不同的思考和解决问题的范 式。 ‧ 迭代:“自下而上”地解决问题。从最基础的步骤开始,然后不断重复或累加这些步骤,直到任务完成。 ‧ 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。 以上述求和函数为例,设问题 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 适用于子问题分解,如树、图、分治、回溯等,代码结构简洁、 清晰 Tip 如果感觉以下内容理解困难,可以在读完“栈”章节后再来复习。 那么,迭代和递归具有什么内在联0 码力 | 384 页 | 18.49 MB | 10 月前3
共 47 条
- 1
- 2
- 3
- 4
- 5













