Go语言中文网 为您找到相关结果 132

Go 1.10 的pprof的工具将直接支持火焰图

google/pprof是一个性能可视化和分析工具,由Google的工程师开发。虽然自称不是Google官方的工具,但是项目挂在google的team下,而且还在Google其它项目中得到应用,是非常好的一个性能剖析工具。 go tool pprof 复制了一份google/pprof的代码, 封装了一个golang的工具,用来分析Go pprof包产生的剖析数据,也就是最终数据的处理和分析还是通过gogole/pprof来实现的。 这样,你至少就用两种方式来分析Go程序的 pprof数据: go tool pprof : Go封装的pprof的工具 pprof: 原始的pprof工具 pprof读写一组profile.proto格式的数据,产生可视化的数据分析报告,数据是protocol ...阅读全文

博文 2017-11-23 02:56:30 smallnest

Go语言开发分布式任务调度(更新到第三章)

微信号:new_video qq号码:2381392963资料来源网络,仅供学习使用,请勿传播。如有侵权,请联系删除。课程介绍:Golang因其强大的协程机制,现已广泛应用于解决分布式环境下的高并发问题。本门课程中将结合Etcd与MongoDB实现一个基于Master-Worker分布式架构的任务调度系统。你不仅将.....阅读全文

博文 2019-07-15 04:02:40 天天向上学习

在Golang中对MySQL进行操作

Golang官方并没有提供数据库驱动,但通过database/sql/driver包来提供了实现驱动的标准接口。可以在Github上找到很多开源的驱动。 其中go-sql-driver/mysql是一个比较推荐的驱动,其完全支持database/sql接口。 使用这个驱动, 在项目里import进: import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) 在正式使用database/sql包之前,首先得明白sql.DB并不代表一个数据库连接,它并不会与数据库建立任何连接,也不会验证参数的合法性,要想知道DSN的合法性,需使用sql.DB实例(比如db)db.Ping() 方法, 如下: err = db.Ping() if e...阅读全文

博文 2019-03-09 14:34:39 灯风罩戟

Golang搭建并行版爬虫信息采集框架

1.简介 Go语言在分布式系统领域有着更高的开发效率,提供了海量并行的支持。本博文介绍的是采用Go语言搭建一个并行版爬虫信息采集框架,博文中使用58同城中租房网页做案例。相比较其他爬虫程序它的优点是: 1.抓取信息速度非常快,因为是并行处理的,通过配置协程数量,可以比普通的爬虫信息采集程序快上上百倍。 2.功能模块化,每个功能模块各司其职,配置简单。通过修改信息抓取规则,就可以采集不同网站中的数据。 程序源代码放到github上,链接地址是: https://github.com/GuoZhaoran/crawler 2.项目架构 下面是项目整体架构的示意图: 2.1 Request(请求) 该爬虫架构中Request请求可以理解为:抓取请求url的内容,例如抓取58同城北京市的租房信息时,...阅读全文

博文 2018-10-05 22:34:38 郭兆冉

Golang创建daemon程序

## daemon的概念 守护进程(daemon)就是一直在后台运行的进程,它没有控制终端,无法和前台的用户交互。当我们打开一个终端时会创建一个session会话(shell),从用户登录开始到用户退出为止,这段时间内在该终端执行的进程都属于这一个会话。一个会话一般包含一个前台进程组、一个后台进程组和一个会话首进程(shell程序本身)。 例如用以下命令启动5个进程: > $ proc1 | proc2 & > $ proc3 | proc4 | proc5 > proc1和proc2属于同一个后台进程组,proc3、proc4、proc5属于同一个前台进程组,Shell进程本身属于一个单独的进程组。这些进程组的控制终端相同,它们属于同一个session。 > **"后台任务"与"前台任务"...阅读全文

博文 2017-02-09 20:02:22 shanks

基于go通道的异步任务调度器

项目地址:[https://github.com/chenhg5/go-task](https://github.com/chenhg5/go-task) 安装 ``` go get github.com/chenhg5/go-task ``` 使用 ``` import ( "runtime" "fmt" "time" "github.com/chenhg5/go-task" ) func main() { // init task.InitTaskReceiver(runtime.NumCPU()) // add task task.AddTask(task.NewTask( map[string]interface{}{ "paramA" : "value", }, // parame...阅读全文

100%移植阿里云移动测试技术,竟仅需1周?!——移动测试专有云(2)——架构详解

摘要: 移动测试的应用架构 作为一整个庞大的移动测试解决方案,MQC专有云系统内部包含了非常多的软硬件模块,整个系统紧密高效的互相连接稳定配合。从模块划分上来看,主要包括:用户交互平台、任务调度平台、移动终端控制系统、无线机房管理平台、自动化测试能力、中间件(数据库、缓存、文件存储)、无线机房硬件方案、专家支持服务。 **移动测试的应用架构** 作为一整个庞大的移动测试解决方案,MQC专有云系统内部包含了非常多的软硬件模块,整个系统紧密高效的互相连接稳定配合。从模块划分上来看,主要包括:用户交互平台、任务调度平台、移动终端控制系统、无线机房管理平台、自动化测试能力、中间件(数据库、缓存、文件存储)、无线机房硬件方案、专家支持服务。除了自动化测试能力,其他应用模块构成专有云基础服务。 ...阅读全文

go+chan并发执行

利用一个chan执行一个并发的任务, 整个任务的最大耗时是最耗时的那个子任务 func SendChan(data int){ t := 10 - data if data == 5{ t = 20 } time.Sleep(time.Duration(t*1e9)) C <- data } func main(){ for i:=0; i<10; i++{ go SendChan(i) } for i:=0; i<10; i++{ var data int = <- C fmt.Println("data:", data) } ...阅读全文

博文 2017-08-05 03:14:54 jinjiashan

golang后台任务库

功能需求 本来想用linux自带的corntab,然而corn调试困难,而且不支持以下需求 能分布式 有http接口 能调试 有统计 kala 这个需求也不算小众,于是在网上查了一下,果然有,而且还比较多。 最后选择了kala,主要是它的接口比较简洁,而且调试方便。 注意 与其它库不同的是,kala没有选择与corntab格式兼容,而是采用了iso8601时间格式。 格式说明,可以见我上一篇博客。 小优化 kala是一个任务管理平台,也提供了golang、nodejs和python的客户端sdk,可是默认的 golang库,有点问题,于是我把kala默认的库修改了一下,只保留的客户端功能。 使用方法和官方一样,git仓库在此...阅读全文

博文 2017-12-01 00:00:01 xdao

ubuntu12下安装golang和IDE

参照http://www.golangcn.com/doc/install //安装go 到/usr/local $sudo tar -C /usr/local -xzf go1.1.1.linux-386.tar.gz //在文件 $HOME/.bashrc中增加如下行 export PATH=$PATH:/usr/local/go/bin //执行下面一行 $source .bashrc 下面分割线内是官方说法,但是设置了有问题,我还是按上面两步设置的 =================================== //在文件 $HOME/.profile中增加如下行 export PATH=$PATH:/usr/local/go/bin //执行下面一行 $source .pr...阅读全文

博文 2016-01-18 20:00:03 patch

go任务调度9(op实现分布式乐观锁)

package main import ( "go.etcd.io/etcd/clientv3" "time" "fmt" "context" ) func main() { var ( config clientv3.Config client *clientv3.Client err error lease clientv3.Lease leaseGrantResp *clientv3.LeaseGrantResponse leaseId clientv3.LeaseID keepRespChan <-chan *clientv3.LeaseKeepAliveResponse keepResp *clientv3.LeaseKeepAliveResponse ctx context.Co...阅读全文

博文 2019-04-20 22:35:12 梁十八

Go语言打造分布式Crontab 轻松搞定高性能任务调度

Go语言开发分布式任务调度 轻松搞定高性能CrontabGolang因其强大的协程机制,现已广泛应用于解决分布式环境下的高并发问题。本门课程中将结合Etcd与MongoDB实现一个基于Master-Worker分布式架构的任务调度系统。你不仅将掌握Golang的工程实践能力,而且会收获诸如CAP、Raft的分布式经典理论与架构经验,”工程能力”与”知识体系”齐头并进,实现华丽质变第1章 课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。1-1 课程导学 试看第2章 如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作...阅读全文

博文 2019-05-04 19:34:37 花开月月圆

基于Eclipse的Go语言可视化开发环境

http://jingyan.baidu.com/article/d7130635032e2f13fdf475b8.html 基于Eclipse的Go语言可视化开发环境 | 浏览:2924 | 更新:2013-12-21 18:24 | 标签:eclipse 1 2 3 4 5 6 7 分步阅读 搭建与使用一个基于Eclipse的Go语言可视化开发环境。 注意: 在阅读此片经验前,先确保必要工具已经安装或打开 工具/原料 搭建好Go语言开发环境,详细步骤见经验: http://jingyan.baidu.com/article/c85b7a6414e5ee003bac95c6.html Eclipse开发平台 官方下载地址: http://www.eclipse.org/downloads/...阅读全文

博文 2016-06-03 15:00:02 kungfupanda

go任务调度10(操作mongodb)

后台启动mongodb服务器端: nohup ./bin/mongod --dbpath=./data & package main //导入 import ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" "os" "time" ) type Howie struct { //struct里面获取Ob...阅读全文

博文 2019-04-21 01:35:11 梁十八

Go语言打造分布式Crontab 轻松搞定高性能任务调度

Go语言开发分布式任务调度 轻松搞定高性能CrontabGolang因其强大的协程机制,现已广泛应用于解决分布式环境下的高并发问题。本门课程中将结合Etcd与MongoDB实现一个基于Master-Worker分布式架构的任务调度系统。你不仅将掌握Golang的工程实践能力,而且会收获诸如CAP、Raft的分布式经典理论与架构经验,”工程能力”与”知识体系”齐头并进,实现华丽质变第1章 课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。1-1 课程导学 试看第2章 如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作...阅读全文

博文 2019-05-04 19:34:37 为了谁你知道

go任务调度11(分布式crontab架构分析)

crontab是单机工具(所有worker都在调度,如果有1000个任务,所有worker都在调用者1000个任务。对于编译型语言来说,排序一个一千万的数组只需要一秒,对于一千一万的调度,无需担心性能)(相当于完成一个到worker集群的通知,通知它们杀死任务...阅读全文

博文 2019-04-21 16:35:13 梁十八

Go 语言团队否决关于"try"语句的提案

Go语言作者之一 Robert Griesemer前几天代表Go语言开发团队的提案审查委员会公布了关于否决一项提案的决定。Robert在「内置的Go错误检查函数,"try"」提案下面的回复中发布了这个公告,并表示基于社区压倒性的反应和由此引起的广泛讨论,团队决定提前拒绝此项提案。关于Go 2的错误处理问题,Robert表示团队去年就已阐述了对此的看法,但当时并没引起足够的注意和讨论。所以关于"try"语句的提案可能是解决此问题的一个很好的解决方案,但对于大多数使用者而言,这可能没解决到什么问题。下面举一个try语句的示例。例如如下代码:f, err := os.Open(filename) if err != nil { return …, err // zero values for ot...阅读全文

博文 2019-07-21 01:04:16 NetFly

详解配置sublime text 2/3的Golang开发环境

1.下载并安装sublime text 2/3 官网下载:http://www.sublimetext.com/ 2.成功安装sublime text后,启动sublime text,依次选择菜单栏中的"View"->"Show Console"或者直接按快捷键"Ctrl+`",弹出控制台,根据不同的版本输入下面的内容以安装"Package Contral" 1).sublime text 2 import urllib2,os; pf='Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else No...阅读全文

博文 2015-06-17 20:04:34 u011843461

Notepad++配置Golang关键字高亮

1.Go语言支持包下载到后,解压会得到两个xml,一个是userDefineLang_Go.xml,一个是go.xml。http://notepad-plus.sourceforge.net/commun/userDefinedLang/go.zip2.配置Notepad++1).打开userDefineLang_Go.xml,把文件开头和结尾的注释取消掉。2).把userDefineLang_Go.xml拷贝到Notepad++的安装目录,我是放到了根目录。把go.xml拷贝到Notepad++安装目录下的 plugins\APIs 下面。3).打开Notepad++,在菜单栏中选择语言 -> 自定义语言。在弹出的对话框里点击Impor...阅读全文

博文 2018-06-27 12:34:47 々菰單

云渲染集群监控与任务调度架构设计

首先说一下此项目的背景,公司主要从事互联网家居设计行业,所以最重要的就是室内设计,初期做的是离线渲染,设计师使用我们的设计软件做设计,将设计好的方案提交至后端,由我们的构建应用做参数转换,然后提交至我们的渲染引擎进行云渲染,最终出设计图。 云渲染的专业知识要求比较高,本人也是第一次接触,对于渲染引擎、专业图形显卡的预研工作涉及颇少,最终大佬选用英伟达的iray渲染引擎和2080TI显卡,话不多说先上整体的架构设计图: iraycloud.png 接下来细述各应用的职责与功能: dr-client:面向C端设计师使用的设计软件客户端。 dr-web: 设计软件服务端,存储设计师方案参数。 dr-notify:渲染任务状态消息的收发。 rocketMQ:DR端和IRAY端数据通讯的中间层。 ir...阅读全文

MaxCompute2.0助力众安保险快速成长

摘要:2017云栖大会阿里云大数据计算服务(MaxCompute)专场,众安保险数据总监王超群带来MaxCompute助力众安保险方面的演讲。本文主要从MaxCompute优势开始谈起,进而谈及大数据能够公司运营带来的好处,最后重点分析了众安保险的数据平台建设,包括任务调度、元数据和数据质量监控等。 **原文地址:http://click.aliyun.com/m/43993/** 2017云栖大会阿里云大数据计算服务(MaxCompute)专场,众安保险数据总监王超群带来MaxCompute助力众安保险方面的演讲。本文主要从MaxCompute优势开始谈起,进而谈及大数据能够为公司运营带来的好处,最后重点分析了众安保险的数据平台建设,包括任务调度、元数据和数据质量监控等。 ...阅读全文

005-本地代理-proxy

#encoding:utf-8 import urllib2 """ Fiddler设置HTTPS代理 1、打开Fiddler,菜单栏:Tools –> Fiddler Options 打开fiddler配置。 2、打开 HTTPS 配置项,勾选“Capture HTTPS CONNECTs”和“Decrypt HTTPS traffic”,然后点击“OK”。 重启Fiddler,就可以实现HTTPS请求的代理了。 """ http_proxy = urllib2.ProxyHandler({'http':'192.168.1.14:8888'}) #设置一个代理 opener = urllib2.build_opener(http_proxy) #创建一个打开器,打开url request...阅读全文

博文 2018-12-16 01:34:54 豆瓣奶茶

golang实现redis的延时消息队列功能

前言 在学习过程中发现redis的zset还可以用来实现轻量级的延时消息队列功能,虽然可靠性还有待提高,但是对于一些对数据可靠性要求不那么高的功能要求完全可以实现。本次主要采用了redis中zset中的zadd, zrangebyscore 和 zdel来实现一个小demo。 提前准备 安装redis, redis-go 因为用的是macOS, 直接 $ brew install redis $ go get github.com/garyburd/redigo/redis 复制代码又因为比较懒,生成任务的唯一id时,直接采用了bson中的objectId,所以: $ go get gopkg.in/mgo.v2/bson 复制代码唯一id不是必须有,但如果之后有实际应用需要携带,便于查找相...阅读全文

博文 2019-11-25 14:34:16 菜菜jjj

xxl-job定时任务golang执行器 xxl-job-executor-go

# xxl-job-executor-go 很多公司java与go开发共存,java中有xxl-job做为任务调度引擎,为此也出现了go执行器(客户端),使用起来比较简单: # 支持 ``` 1.执行器注册 2.耗时任务取消 3.任务注册,像写http.Handler一样方便 4.任务panic处理 5.阻塞策略处理 6.任务完成支持返回执行备注 7.任务超时取消 (单位:秒,0为不限制) 8.失败重试次数(在参数param中,目前由任务自行处理) 9.日志查看(未完成) ``` ## Example ``` package main import ( xxl "github.com/xxl-job/xxl-job-executor-g...阅读全文

为什么要学习更多的编程语言

![page head](https://raw.githubusercontent.com/studygolang/gctt-images/master/why-need-to-learn-mpl/1.jpg) ## 我与编程语言的开放式关系 迄今为止我已经编程四年了。从开始的基于 C# 的游戏开发,然后使用 python 处理机器学习。学习使用 Javascript 以及 Typescript 做前端工作。后来想要做移动端应用,所以又学习了 Ionic,React,React Naive。为了达到更好的后端性能,Go 是一个最佳选择。随着 Flutter 的诞生,所以我学习了 Dart 来编写更多的移动应用。我从一些大学课堂上学习 Java,当我在 Facebook 工作时学习使用 PH...阅读全文

集群管理和容器编排工具 SwarmKit

SwarmKit 是Docker公司开源的Docker集群管理和容器编排工具,其主要功能包括节点发现、基于[raft算法](https://en.wikipedia.org/wiki/Raft_%28computer_science%29)的一致性和任务调度等。 ### 基本概念 服务器上运行SwarmKit工具的swarmd命令后,即可将其加入到服务器集群中,该服务器就成为集群中的一个 节点 。SwarmKit将节点分为两类: * 工作节点 负责通过执行器运行任务。SwarmKit的默认执行器为Docker容器执行器(Docker Container Executor); * 管理节点 负责接收和响应用户的请求,将集群状态调节成最终状态。 用户可以动态调整节点的角色。 ...阅读全文

小知识点--crontab

前言 这两周学了很多东西,还把golang语言基本掌握了,收获还是挺多的。在做安全的过程中,有很多需要定时执行的任务,比如抓取主机数量,端口数据等,这都逃不开linux中的crontab命令,今天分享一下crontab这个小知识点。提醒大家一下,在大公司服务器中,部署的基本上都是CentOS,所以大家想学CentOS上的操作,推荐大家看一下《鸟哥私房菜》 命令说明 crontab 命令可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。 命令格式 crontab [-u user] file 或者 crontab [-u user] [-e | -l | -r] 参数解释 -u user:用来设定某个用户的cro...阅读全文

Golang的socket编程(三):并发Server

一、概述上一篇实现了一个server和client通信,完成了小写转大写的功能,但是是一个单任务式的响应:客户端发送连接接收响应,程序结束;服务端则接收数据响应数据也结束!就实际需要而言,并没有很大的用处,所以现在我们就给客户端和服务端添加上并发功能。 逻辑其实很简单,就是利用golang的gorutine,一旦来新的连接,就开启一个gorutine去处理,然后响应,直到客户端关闭连接。 二、服务端1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package mainimport ( "net" "fmt" "strings")func handle(con...阅读全文

博文 2018-05-17 09:28:40 Client | 马谦的博客

Golang模仿七牛图片处理API

之前一直在用qiniu的存储服务,生成图片的缩略图,模糊图,视频的webp,现在需要把存储移到s3上,那么这些图片,视频处理就要自己动手写了,本文梳理一下大致的思路。 分析需求 先看一下qiniu的接口是如何处理图片的,例如先截取视频第一秒的图片,再把图片缩略,最后存储到一个新的key,命令可以这么写 vframe/jpg/offset/1|imageMogr2/thumbnail/400x|saveas/xxx, 可以看到三个操作之间用 | 符号分割,类似unix 的 pipe 操作。 上面的操作算作一个cmd, 一次API请求可以同时处理多个cmd,cmd之间用分号分割, 处理完毕后,在回调中把处理结果返回,例如 { "id": "xxxxx", "pipeline": "xxx", "...阅读全文

博文 2017-02-09 08:29:46 一堆好人卡

Golang实现简单爬虫框架(5)——项目重构与数据存储

前言 在上一篇文章《Golang实现简单爬虫框架(4)——队列实现并发任务调度》中,我们使用用队列实现了任务调度,接下来首先对两种并发方式做一个同构,使代码统一。然后添加数据存储模块。 注意:本次并发是在上一篇文章简单并发实现的基础上修改,所以没有贴出全部代码,只是贴出部分修改部分,要查看完整项目代码,可以查看上篇文章,或者从github下载项目源代码查看 1、项目重构 (1)并发引擎 通过分析我们发现,两种不同调度的区别是每个worker一个channel还是 所有worker共用一个channel,所以我们在接口中定义一个函数WorkerChan(),用来决定这件事,即worker一个channel还是 所有worker共用一个channel。此时ConfigMasterWorkerCh...阅读全文

博文 2019-06-03 23:34:21 盐的甜

go_工作池

```golang package main import ( "fmt" "time" ) // 在这个例子中,我们将看到如何使用goroutine 和channel实现一个_工作池_ // 工作池是我们将要在并发实例中支持的任务了,这些执行者将从`jobs`通道接受任务, // 并且通过`result`发送对应的结果。 // 工作池 func worker(id int, jobs <-chan int, result chan<- int) { for j := range jobs { fmt.Println("worker : ", id, "processing job ", j) time.Sleep(time.Second * 2) // 构建耗时2s的任务 result <...阅读全文

博文 2018-06-12 17:10:57 18393910396

进程、线程和协程

姓名:张志文 学号:19021210649 链接:https://www.jianshu.com/p/80bde972196d [嵌牛导读] 计算机中的线程,进程和协程之间存在着许多的联系和区别 [嵌牛鼻子] 线程;进程;协程 [嵌牛提问] 什么是线程、进程和协程? 进程 我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。 进程一般由程序、数据集合和进程控制块三部分...阅读全文

博文 2019-11-02 17:34:02 aside section._1OhGeD

Go语言开发分布式任务调度 轻松搞定高性能Crontab

第1章 课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。1-1 课程导学试看第2章 如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作模式,并图示分析shell执行任务的底层原理与涉及的系统调用。最后,我们使会用Go语言的Command标准库,实现任务的执行,输出捕获,杀死任务等重要功能。 ...2-1 原理介绍2-2 执行任务2-3 捕获任务输出2-4 强制结束任务第3章 如何解析cron表达式cron表达式是配置定时任务执行周期的核心工具。在本章中,将首先分析cron表达式的构成以及解析逻辑,并利用开源项目c...阅读全文

博文 2019-03-08 12:34:43 itsourceshop

Go语言开发工具 LiteIDE X27 发布

经过一个月的开发,LiteIDE X27正式发布。 新版本重新设计了编译和编辑工具栏。支持编译项目锁定,支持Go语言鼠标下代码提示和鼠标导航功能,编辑器支持换行/空白显示等设置,修复了谷歌拼音输入法光标显示等BUG。 ### 2015.2.4 Ver X27 * LiteIDE * create independent project gotools and replace liteide_stub * move build toolbar to the main windowww.suanxian.com * move editor tab to editor widget * fix multi window keyshort invalid * fix treeview scroll ...阅读全文

go任务调度2(linux的cron调用)

cron格式:分 时 日 月 周 每隔5分钟执行1次: /5 * echo hello > /tmp/x.log 每隔1-5分钟执行1次: 1-5 echo hello > /tmp/x.log 每天10点整、22点整执行1次: 0 10,22 * echo hello > /tmp/x.log 每隔1-5分钟执行1次: 1-5 echo hello > /tmp/x.log Parse():解析与校验Cron表达式Next():根据当前时间,计算下次调度时间 package main import ( "fmt" "github.com/gorhill/cronexpr" "time" ) func main() { var ( expr *cronexpr.Expression err ...阅读全文

博文 2019-04-19 18:35:13 梁十八

Golang实现简单爬虫框架(5)——项目重构与数据存储

前言 在上一篇文章《Golang实现简单爬虫框架(4)——队列实现并发任务调度》中,我们使用用队列实现了任务调度,接下来首先对两种并发方式做一个同构,使代码统一。然后添加数据存储模块。 注意:本次并发是在上一篇文章简单并发实现的基础上修改,所以没有贴出全部代码,只是贴出部分修改部分,要查看完整项目代码,可以查看上篇文章,或者从github下载项目源代码查看 1、项目重构 (1)并发引擎 通过分析我们发现,两种不同调度的区别是每个worker一个channel还是 所有worker共用一个channel,所以我们在接口中定义一个函数WorkerChan(),用来决定这件事,即worker一个channel还是 所有worker共用一个channel。此时ConfigMasterWorkerCh...阅读全文

博文 2019-05-30 15:34:40 jsfantasy

go-内存机制(4)

go的GC机制 GO的GC是并行GC,也就是说GC的大部分清理和普通的go代码是同时运行的,这让GO的GC流程比较复杂。 标记清除(Mark And Sweep) 此算法主要有两个主要的步骤: 标记(Mark phase) = 清除(Sweep phase) 第一步,找出不可达的对象,然后做上标记。 第二步,回收标记好的对象。 操作非常简单,但是有一点需要额外注意:mark and sweep算法在执行的时候,需要程序暂停,即stop the world。 三色标记法 对于Mark And Sweep来说要通过STW保证GC期间标记对象的状态不能变化,整个程序都要暂停掉,在外部看来程序就会卡顿。 当前Golang使用的垃圾回收机制是三色标记发配合写屏障和辅助GC,三色标记法是标记-清除法的一...阅读全文

博文 2020-03-28 15:32:45 GGBond_8488

Go语言开发分布式任务调度 轻松搞定高性能Crontab

Go语言开发分布式任务调度 轻松搞定高性能CrontabGolang因其强大的协程机制,现已广泛应用于解决分布式环境下的高并发问题。本门课程中将结合Etcd与MongoDB实现一个基于Master-Worker分布式架构的任务调度系统。你不仅将掌握Golang的工程实践能力,而且会收获诸如CAP、Raft的分布式经典理论与架构经验,”工程能力”与”知识体系”齐头并进,实现华丽质变第1章 课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。1-1 课程导学 试看第2章 如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作...阅读全文

博文 2019-05-22 17:34:41 方便你我他

go任务调度5(go操作etcd)

连接etcd: package main import ( "fmt" "go.etcd.io/etcd/clientv3" "time" ) var ( config clientv3.Config client *clientv3.Client err error ) func main() { //客户端配置 config = clientv3.Config{ Endpoints: []string{"0.0.0.0:2379"}, //集群列表 DialTimeout: 5 * time.Second, } //建立连接 if client, err = clientv3.New(config); err != nil { fmt.Println(err) return } clie...阅读全文

博文 2019-04-20 17:35:12 梁十八

go任务调度4(etcd安装和基本使用)

下载,解压,进入目录,运行: [root@bogon etcd-v3.3.12-linux-amd64]# ./etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379'(本地etcd的端口) etcd控制工具: [root@bogon etcd-v3.3.12-linux-amd64]# ETCDCTL_API=3 ./etcdctl (前面需要一个环境变量ETCDCTL_API=3)put、get、del、--prefix: [root@bogon etcd-v3.3.12-linux-amd64]# ETCDCTL_API=3 ./etcdctl put "n...阅读全文

博文 2019-04-20 03:35:10 梁十八

Golang实现简单爬虫框架(5)——项目重构与数据存储

前言 在上一篇文章《Golang实现简单爬虫框架(4)——队列实现并发任务调度》中,我们使用用队列实现了任务调度,接下来首先对两种并发方式做一个同构,使代码统一。然后添加数据存储模块。 注意:本次并发是在上一篇文章简单并发实现的基础上修改,所以没有贴出全部代码,只是贴出部分修改部分,要查看完整项目代码,可以查看上篇文章,或者从github下载项目源代码查看 1、项目重构 (1)并发引擎 通过分析我们发现,两种不同调度的区别是每个worker一个channel还是 所有worker共用一个channel,所以我们在接口中定义一个函数WorkerChan(),用来决定这件事,即worker一个channel还是 所有worker共用一个channel。此时ConfigMasterWorkerCh...阅读全文

博文 2019-05-30 21:34:51 盐的甜

Golang实现简单爬虫框架(4)——队列实现并发任务调度

前言 在上一篇文章《Golang实现简单爬虫框架(3)——简单并发版》中我们实现了一个最简单并发爬虫,调度器为每一个Request创建一个goroutine,每个goroutine往Worker队列中分发任务,发完就结束。所有的Worker都在抢一个channel中的任务。但是这样做还是有些许不足之处,比如控制力弱:所有的Worker在抢同一个channel中的任务,我们没有办法控制给哪一个worker任务。 其实我们可以自己做一个任务分发的机制,我们来决定分发给哪一个Worker 注意:本次并发是在上一篇文章简单并发实现的基础上修改,所以没有贴出全部代码,只是贴出部分修改部分,要查看完整项目代码,可以查看上篇文章,或者从github下载项目源代码查看 1、项目架构 在上一篇文章实现简单并发...阅读全文

博文 2019-05-27 12:34:37 jsfantasy

进程、线程和协程

姓名:张志文 学号:19021210649 链接:https://www.jianshu.com/p/80bde972196d [嵌牛导读] 计算机中的线程,进程和协程之间存在着许多的联系和区别 [嵌牛鼻子] 线程;进程;协程 [嵌牛提问] 什么是线程、进程和协程? 进程 我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。 进程一般由程序、数据集合和进程控制块三部分...阅读全文

博文 2019-10-28 23:32:59 aside section._1OhGeD

Go For It ,一个灵活的待办事项列表程序

Go For It,是我们开源工具系列中的第十个工具,它将使你在 2019 年更高效,它在 Todo.txt 系统的基础上构建,以帮助你完成更多工作。每年年初似乎都有疯狂的冲动想提高工作效率。新年的决心,渴望开启新的一年,当然,“抛弃旧的,拥抱新的”的态度促成了这一切。通常这时的建议严重偏向闭源和专有软件,但事实上并不用这样。 这是我挑选出的 19 个新的(或者对你而言新的)开源工具中的第 10 个工具来帮助你在 2019 年更有效率。 Go For It有时,人们要高效率需要的不是一个花哨的看板或一组笔记,而是一个简单、直接的待办事项清单。像“将项目添加到列表中,在完成后检查”一样基本的东西。为此,纯文本 Todo.txt 系统可能是最容易使用的系统之一,几乎所有系统都支持它。 Go Fo...阅读全文

博文 2019-03-16 00:35:18 wx5c61773e59d70

go任务调度3(etcd协调服务、raft协议)

etcd是将数据存储在集群中的高可用k-v存储。允许应用实时监听存储中的k-v变化。能容忍单点故障,能够应对网络分区。 (raft是一个分布式协议,管理的是日志;etcd管理的是k-v,把k-v放到日志里,kv就编程分布式集群了)(调用者写入请求发给leader请求写入k-v,leader会将日志实时向follower们复制,leader不会立即返回给调用者,会马上往集群follower做日志拷贝。当日志被复制给N+1个节点后(即大多数),本地提交(也就是告诉客户端提交成功),返回给调用者(客户端),为什么复制给N+1,而不是2N+1后就告诉客户端成功了呢?这就是大多数协议,也就是抽屉理论的重要表现)(一旦完成提交,leader会周期性把自己的提交信息告诉所有follower,这样,其他fo...阅读全文

博文 2019-04-19 20:35:11 梁十八

一种基于AliOS Things的uData感知设备软件框架

摘要:   uData框架设计之初的思想是基于传统sensorhub概念基础之上的,结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架。 **点此查看原文**:http://click.aliyun.com/m/40592/ **uData诞生背景**   uData框架设计之初的思想是基于传统sensorhub概念基础之上的,结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架。uData的主要目的是为了解决IoT端侧设备传感器开发的周期长、应用算法缺少和无云端数据一体化等痛点问题。 **uData概要介绍**   uData设计之初是遵循分层解耦...阅读全文