golang后台任务,golang定时任务调度

本文目录一览:

golang做后台开发有什么优势和劣势

golang在近些年被追捧,不管某华,某阿在很多服务器开发上都在使用。

你不用怀疑golang的

优势:部署简单,良好的语言设计,并发性好,性能优良,开发简洁快,标准库强大,编译简单

缺点:还存在一些缺陷(例如垃圾回收),缺少安全检查,性能方面目前比不过java,第三方库不及java

但作为新兴语种,我们不用担心,背后有谷歌支持和java持平也就是时间上的问题。

而且前面还有某华,某阿顶着不怕。

一起使用GO(golang) 来做一个后台管理系统系列10 使用mod 来管理包

原项目采用gopath来管理的引用库,但有小伙伴反应说包不好下,虽然我把对应的包做了百度云盘共享,但小伙伴们仍然感觉不太好用。特别是最近把go SDK升级到1.18.在管理包上终于下决心使用mod来重新重构下包管理。

一、配置启用Mod

首先那:

确定是否开启了

如果没有开启请开启它。开启命令执行:

#设置 使用七牛云下载

来看下现在的配置:

二、创建项目

上边都说了如何开启了。下面介绍下如何使用

1. 可以随便找一个目录创建项目:myGoProjectNew

这个时候查看目录下会多出一个go.mod的文件:

里面也有了。标识了下SDK的版本1.18

2. 创建 main.go文件

3. 执行:

这时候就会自动下载引用了。

查看Go.mod文件

最后放两张效果图:

感觉还可以得点赞收藏哦。想要源码的私信我获取源码。

Golang什么时候会触发GC

Golang采用了三色标记法来进行垃圾回收,那么在什么场景下会触发这个回收动作呢?

源码主要位于文件 src/runtime/mgc.go go version 1.16

触发条件从大方面说,可分为 手动触发 和 系统触发 两种方式。手动触发一般很少用,主要由开发者通过调用 runtime.GC() 函数来实现,而对于系统自动触发是 运行时 根据一些条件判断来进行的,这也正是本文要介绍的内容。

不管哪种触发方式,底层回收机制是一样的,所以我们先看一下手动触发,根据它来找系统触发的条件。

可以看到开始执行GC的是 gcStart() 函数,它有一个 gcTrigger 参数,是一个触发条件结构体,它的结构体也很简单。

其实在Golang 内部所有的GC都是通过 gcStart() 函数,然后指定一个 gcTrigger 的参数来开始的,而手动触发指定的条件值为 gcTriggerCycle 。 gcStart 是一个很复杂的函数,有兴趣的可以看一下源码实现。

对于 kind 的值有三种,分别为 gcTriggerHeap 、 gcTriggerTime 和 gcTriggerCycle 。

运行时会通过 gcTrigger.test() 函数来决定是否需要触发GC,只要满足上面基中一个即可。

到此我们基本明白了这三种触发GC的条件,那么对于系统自动触发这种,Golang 从一个程序的开始到运行,它又是如何一步一步监控到这个条件的呢?

其实 runtime 在程序启动时,会在一个初始化函数 init() 里启用一个 forcegchelper() 函数,这个函数位于 proc.go 文件。

为了减少系统资源占用,在 forcegchelper 函数里会通过 goparkunlock() 函数主动让自己陷入休眠,以后由 sysmon() 监控线程根据条件来恢复这个gc goroutine。

可以看到 sysmon() 会在一个 for 语句里一直判断这个 gcTriggerTime 这个条件是否满足,如果满足的话,会将 forcegc.g 这个 goroutine 添加到全局队列里进行调度(这里 forcegc 是一个全局变量)。

调度器在调度循环 runtime.schedule 中还可以通过垃圾收集控制器的 runtime.gcControllerState.findRunnabledGCWorker 获取并执行用于后台标记的任务。

原创文章,作者:QTGG,如若转载,请注明出处:https://www.506064.com/n/140734.html

(0)
QTGGQTGG
上一篇 2024-10-04
下一篇 2024-10-04

相关推荐

  • rowdata:更好的管理与利用数据

    一、rowdata是什么? rowdata 是一个管理和利用数据的工具,旨在为开发者、数据科学家和分析师提供一个简易的方式来处理数据。与其他数据处理工具不同的是,rowdata 以…

    编程 2024-10-04
  • python自学day4(Python自学书籍)

    本文目录一览: 1、Python视频教程,百度云 2、如何才能自学好python? 3、求python入门视频教程,云盘分享谢谢 4、python如何自学 5、如何自学Python…

    编程 2024-10-03
  • 包含python2.7安装mysqldb的词条

    本文目录一览: 1、如何用python的pip安装mysqldb? 2、如何用python的pip安装mysqldb 3、如何在Anaconda下安装MySQLdb,操作系统为Ce…

    编程 2024-10-03
  • php服务mp4(php服务器绑定域名)

    本文目录一览: 1、搭建了wamp下,支持php文件了,但是直接访问mp4文件不可以,怎么办? 2、phpcms v9中如何上传mp4文件 3、PHP求助 readfile 怎么实…

    编程 2024-10-03
  • JavaScript Trim函数的详细解析

    一、Trim函数的基本介绍 JavaScript中的Trim函数用来移除一个字符串的首尾空白字符。首尾空白字符包括空格、制表符、换行符等。 它是一个内置的函数,可以直接调用,不需要…

    编程 2024-10-12
  • 基于swing框架的java(swing语句)

    本文目录一览: 1、swing框架是java se里的还是java ee里的? 2、java swing怎样开发出漂亮的界面 3、Java 中的 Swing 框架现在是不是被淘汰了…

  • c语言音乐编写,c语言音乐函数

    本文目录一览: 1、如何用c语言编写歌曲 2、用C语言怎么编写音乐播放器? 3、如何用c语言编辑音乐? 4、用c语言编写音乐播放器 如何用c语言编写歌曲 我们知道,音乐是音高和音长…

    编程 2024-10-14
  • 提高应用流畅度的方法

    在日常应用中,我们很容易遇到应用反应迟缓、卡顿等问题,导致用户体验不佳。本文将介绍一些提高应用流畅度的方法,希望能对开发者有所帮助。 一、代码优化 优化代码是提高应用流畅度的重要手…

    编程 2024-10-04
  • 清除浮动的CSS属性

    浮动是CSS布局中常用的一种方式,可以让元素在页面中浮动自由排列,常见的应用包括图文混排和导航栏。然而,浮动元素可能会对周围的元素造成影响,导致布局错乱,此时我们需要清除浮动。本文…

    编程 2024-10-04
  • Python 3在线工具

    一、背景介绍 Python作为一种强大的编程语言,已经成为了很多开发者和科学家喜爱的语言之一。Python最开始是由Guido van Rossum所开发,旨在创造一门简洁、易读、…

    编程 2024-10-04

发表回复

登录后才能评论