Go源码阅读——mstats.go

go 专栏收录该内容
7 篇文章 0 订阅

【博文目录>>>】 【项目地址>>>】


Go内存统计

Go提供了运行进内存统计的方法,其实现在runtime/mstats.go文件中。go内存统计的作用有:

  • Go内存实时监控
  • 内存dump时,统计内存相关信息
  • Go GC时,统计GC相关的信息
  • 应用调试时分析内存分配等

Go中的内存统计信息结构有两个,分别是mstats和MemStats,详细信息如下:

mstats

// 统计信息。
// 如果您编辑此结构,请同时在下面编辑MemStats类型。它们的布局必须完全匹配。
//
// 有关详细说明,请参阅MemStats文档。与MemStats不同的字段将在此处进一步记录。
//
// 这些字段中的许多都是动态更新的,而其他字段仅在调用updatememstats时才更新。
type mstats struct {
	// 一般统计。
	alloc       uint64 // 已分配但尚未释放的字节
	total_alloc uint64 // 分配的字节(即使已释放)
	sys         uint64 // 从系统获得的字节(应为以下xxx_sys的总和,无锁定,近似值)
	nlookup     uint64 // 指针查找数(未使用)
	nmalloc     uint64 // malloc的次数
	nfree       uint64 // 释放的次数

    // 有关malloc堆的统计信息。
    // 原子更新,或者全局停顿。
    //
    // 与MemStats一样,heap_sys和heap_inuse不会在手动管理的范围内计算内存。
	heap_alloc    uint64 // 已分配但尚未释放的字节(与上面的alloc相同)
	heap_sys      uint64 // 从系统获得的用于GC堆的虚拟地址空间
	heap_idle     uint64 // 空闲跨度(span)中的字节
	heap_inuse    uint64 // mSpanInUse跨度(span)中的字节
	heap_released uint64 // 释放到操作系统的字节

    // 运行时不直接使用heap_objects,而是由updatememstats动态计算。
	heap_objects uint64 // 分配的对象总数

    // 有关低级别固定大小结构分配的统计信息。
    // 受FixAlloc锁保护。
	stacks_inuse uint64 // 手动管理的堆栈跨度中的字节; 自动更新或在STW期间更新
	stacks_sys   uint64 // 仅在mstats中计算newosproc0堆栈; 与MemStats.StackSys不同
	mspan_inuse  uint64 // mspan结构
	mspan_sys    uint64
	mcache_inuse uint64 // mcache结构
	mcache_sys   uint64
	buckhash_sys uint64 // 分析存储桶哈希表
	gc_sys       uint64 // 自动更新或在STW期间更新
	other_sys    uint64 // 自动更新或在STW期间更新

    // 有关垃圾收集器的统计信息。
    //在GC期间受mheap保护或全局停机。
	next_gc         uint64 // 下一个GC何时结束的目标heap_live; ^0(如果禁用)
	last_gc_unix    uint64 // 最后一次gc(Unix时间)
	pause_total_ns  uint64
	pause_ns        [256]uint64 // 最近gc暂停长度的循环缓冲区
	pause_end       [256]uint64 // 最近gc结束时间的循环缓冲区(自1970年以来的纳秒)
	numgc           uint32
	numforcedgc     uint32  // 用户强制GC的数量
	gc_cpu_fraction float64 // GC使用的CPU时间的一部分
	enablegc        bool
	debuggc         bool

    // 有关分配大小类的统计信息。

	by_size [_NumSizeClasses]struct {
		size    uint32
		nmalloc uint64
		nfree   uint64
	}

    // 下面的统计信息不会直接导出到MemStats。

	last_gc_nanotime uint64 // 最后gc(单调时间)
	tinyallocs       uint64 // 不会导致实际分配的微小分配的数量; 没有直接导出到go
	last_next_gc     uint64 // 上一个GC:next_gc
	last_heap_inuse  uint64 // 前一个GC的标记终止处的heap_inuse

    // triggerRatio是触发标记的堆增长比率。
    //
    // 例如,如果该值为0.6,则当活动堆达到上一个周期标记的堆大小的1.6倍时,GC应该启动。
    // 该值应≤GOGC/100,以便触发器堆大小小于目标堆大小。这是在标记终止期间为下一个循环的触发设置的。
	triggerRatio float64

    //
    // gc_trigger是触发标记的堆大小。
    //
    // 当heap_live≥gc_trigger时,标记阶段将开始。
    // 这也是必须完成比例扫描的堆大小。
    //
    // 这是在标记终止期间为下一个循环的触发器从triggerRatio计算的。
	gc_trigger uint64

    // heap_live是GC认为存活的字节数。
    // 即:由最近的GC保留,此后再分配。 heap_live <= heap_alloc,
    // 因为heap_alloc包括尚未被清除的未标记对象(因此在我们分配时上升,而在扫描时下降),
    // 而heap_live排除这些对象(因此仅在GC之间上升)。
    //
    // 这是自动更新的,没有锁定。为了减少争用,仅当从一个mcentrol获得一个跨度(span)时才更新该争用,
    // 此时,它会计算该跨度中所有未分配的槽位(在该mcache从该mcentrol获取另一个跨度之前将对其进行分配)。
    // 因此,它稍微高估了“真实”活动堆的大小。最好高估而不是低估,因为
    //  1)触发GC的时间比必要的要早,而不是可能太晚; 
    //  2)导致保守的GC速率,而不是可能太低的GC速率。
    //
    // 读取应该同样是原子的(或在STW期间)。
    //
    // 每当更新时,都调用traceHeapAlloc()和gcController.revise()。
	heap_live uint64

    // heap_scan是“可扫描”堆的字节数。这是活动堆(由heap_live计算),
    // 但是省略了非扫描对象和对象的非扫描尾部。
    //
    // 每当更新时,都调用gcController.revise()。
	heap_scan uint64

	// heap_marked是前一个GC标记的字节数。标记终止后,heap_live == heap_marked, 
	// 但是与heap_live不同,heap_marked直到下一个标记终止才更改。
	heap_marked uint64
}

MemStats

// MemStats记录有关内存分配器的统计信息。
type MemStats struct {
    // 常规统计信息。

    // Alloc是分配的堆对象的字节。
    //
    // 这与HeapAlloc相同(请参见下文)。
	Alloc uint64

    // TotalAlloc是分配给堆对象的累积字节。
    //
    // TotalAlloc随着分配堆对象而增加,但是与Alloc和HeapAlloc不同,释放对象时它不会减少。
	TotalAlloc uint64

    // Sys是从OS获得的内存的总字节数。
    //
    // Sys是以下XSys字段的总和。 Sys衡量Go运行时为堆,栈和其他内部数据结构保留的虚拟地址空间。
    // 在任何给定时刻,可能并非所有虚拟地址空间都由物理内存支持,尽管通常情况下,所有虚拟地址空间都在某个时刻。
	Sys uint64

    // Lookups是运行时执行的指针查找的次数。
    //
    // 这主要用于调试运行时内部。
	Lookups uint64

    // Mallocs是分配的堆对象的累积计数。
    // 活动对象的数量为Malloc-Frees。
	Mallocs uint64

    // Frees是已释放的堆对象的累积计数。
	Frees uint64

    // 堆内存统计信息。
    //
    // 解释堆统计信息需要了解Go如何组织内存。 Go将堆的虚拟地址空间划分为跨度(“span”),
    // 即内存8K或更大的连续区域。跨度可能处于以下三种状态之一:
    //
    // “空闲”跨度(span)不包含任何对象或其他数据。支持空闲范围的物理内存可以释放回操作系统
    // (但虚拟地址空间永远不会释放),也可以将其转换为“使用中”或“堆栈”跨度(span)。
    //
    // 一个“使用中”的跨度至少包含一个堆对象,并且可能具有可用空间来分配更多的堆对象。
    //
    // “堆栈”跨度用于goroutine堆栈。堆栈跨度不视为堆的一部分。跨度可以在堆和堆栈内存之间改变;永远不会同时使用它们。
    // 
    // HeapAlloc是分配的堆对象的字节。
    //
    // “已分配”堆对象包括所有可访问对象,以及垃圾回收器尚未释放的不可访问对象。
    // 具体来说,HeapAlloc随着分配堆对象而增加,而随着堆被清除而无法访问的对象被释放而减少。
    // 清除过程在GC周期之间逐渐发生,因此这两个过程同时发生,因此HeapAlloc趋于平稳变化
    // (与全局停机的垃圾收集器所采用的典型锯齿形成对比)。
	HeapAlloc uint64

    // HeapSys是从操作系统获得的堆内存字节。
    //
    // HeapSys测量为堆保留的虚拟地址空间量。这包括已保留但尚未使用的虚拟地址空间,
    // 该虚拟地址空间不占用物理内存,但往往很小,以及在物理内存变得不使用后已将其
    // 返回给操作系统的虚拟地址空间(请参阅HeapReleased以衡量后者)。
    //
    // HeapSys估计堆具有的最大大小。
	HeapSys uint64

    // HeapIdle是空闲(未使用)跨度中的字节。
    //
    // 空闲跨度中没有对象。这些范围可以(并且可能已经)返回到操作系统,
    // 或者可以重新用于堆分配,或者可以重新用作栈内存。
    //
    // HeapIdle减去HeapReleased估计可以返回给OS的内存量,但是该内存将由运行时保留,
    // 因此它可以增长堆而无需从OS请求更多内存。如果此差异明显大于堆大小,
    // 则表明活动堆大小最近出现了短暂的峰值。
	HeapIdle uint64

    // HeapInuse是使用中的跨度中的字节。
    //
    // 使用中的跨度中至少包含一个对象。这些跨度只能用于大小大致相同的其他对象。
    //
    // HeapInuse减去HeapAlloc估计专用于特定大小类别的内存量,但当前未使用。这是碎片的上限,但是通常可以有效地重用此内存。
	HeapInuse uint64

    // HeapReleased是返回操作系统的物理内存字节。
    //
    // 这将从返回到OS且尚未为堆重新获取的span范围中计算堆内存。
	HeapReleased uint64

    // HeapObjects是分配的堆对象的数量。
    //
    // 像HeapAlloc一样,随着分配对象的增加,它会增加;而随着堆的清除和无法访问的对象的释放,这会减少。
	HeapObjects uint64

    // 栈内存统计信息。
    //
    // 栈不被视为堆的一部分,但是运行时可以将堆内存的一部分重用于栈内存,反之亦然。

    // StackInuse是栈跨度中的字节。
    //
    // 使用中的栈跨度中至少包含一个栈。这些跨度只能用于相同大小的其他栈。
    //
    // 没有StackIdle,因为未使用的栈范围返回到堆中(因此计入HeapIdle)
	StackInuse uint64

    // StackSys是从OS获得的栈内存的字节。
    //
    // StackSys是StackInuse,再加上直接从OS获取的用于OS线程栈的任何内存(应该很少)。
	StackSys uint64

    // 堆外内存统计信息。
    //
    // 以下统计信息将度量未从堆内存分配的运行时内部结构(通常是因为它们是实现堆的一部分)。
    // 与堆或栈内存不同,分配给这些结构的任何内存都专用于这些结构。
    //
    // 这些主要用于调试运行时内存开销。

    // MSpanInuse是分配的mspan结构的字节。
	MSpanInuse uint64

    // MSpanSys是从操作系统获取的用于mspan结构的内存字节。
	MSpanSys uint64

    // MCacheInuse是分配的mcache结构的字节。
	MCacheInuse uint64

    // MCacheSys是从操作系统获取的用于mcache结构的内存字节。
	MCacheSys uint64

    // BuckHashSys是分析存储桶哈希表中的内存字节。
	BuckHashSys uint64

    // GCSys是垃圾回收元数据中的内存字节。
	GCSys uint64

    // OtherSys是其他堆外运行时分配中的内存字节。
	OtherSys uint64

	// Garbage collector statistics.
    // 垃圾收集器统计信息。

    // NextGC是下一个GC周期的目标堆大小。
    //
    // 垃圾收集器的目标是保持HeapAlloc≤NextGC。
    // 在每个GC周期结束时,根据可获得的数据量和GOGC的值计算下一个周期的目标。
	NextGC uint64

    // LastGC是最后一次垃圾回收完成的时间,自1970年(UNIX时代)以来,以纳秒为单位。
	LastGC uint64

    // PauseTotalNs是自程序启动以来,GC全局停机暂停的累积纳秒。
    //
    // 在全局停机暂停期间,所有goroutine都将暂停并且只有垃圾收集器可以运行。
	PauseTotalNs uint64

    // PauseNs是最近GC全局停机暂停时间(以纳秒为单位)的循环缓冲区。
    //
    // 最近的暂停是在PauseNs[(NumGC+255)%56]处。通常,PauseNs[N%256]记录最近的第N%256个GC周期中暂停的时间。
    // 每个GC周期可能会有多个暂停;这是一个周期中所有暂停的总和。
	PauseNs [256]uint64

    // PauseEnd是最近的GC暂停结束时间的循环缓冲区,自1970年(UNIX时代)以来为纳秒。
    //
    // 此缓冲区的填充方式与PauseNs相同。每个GC周期可能会有多个暂停;这将记录一个周期中最后一个暂停的结束。
	PauseEnd [256]uint64

    // NumGC是已完成的GC周期数。
	NumGC uint32

    // NumForcedGC是应用程序调用GC函数强制执行的GC周期数。
	NumForcedGC uint32

    // 自程序启动以来,GCCPUFraction是该程序使用的该程序可用CPU时间的一部分。
    //
    // GCCPUFraction表示为0到1之间的数字,其中0表示GC没有消耗该程序的CPU。
    // 自程序启动以来,程序的可用CPU时间定义为GOMAXPROCS的整数。也就是说,
    // 如果GOMAXPROCS为2且程序已运行10秒钟,则其“可用CPU”为20秒钟。 
    //  GCCPUFraction不包括用于写屏障活动的CPU时间。
    //
    // 这与GODEBUG = gctrace = 1报告的CPU分数相同。
	GCCPUFraction float64

    // EnableGC表示已启用GC。即使GOGC = off,也总是如此
	EnableGC bool

    // // DebugGC当前未使用。
	DebugGC bool

    // BySize报告按大小分类分配的统计信息。
    //
    // BySize [N]给出大小为S的分配的统计信息,其中
    // BySize [N-1] .Size <S≤BySize [N] .Size。
    //
    // 这不会报告大于BySize [60] .Size的分配。
	BySize [61]struct {
        // Size是此size类中对象的最大字节大小。
		Size uint32

        // Mallocs是在此size类中分配的堆对象的累积计数。分配的累积字节为Size * Mallocs。
        // 此大小类中的活动对象数量为Mallocs-Frees。
		Mallocs uint64

        // Frees是在此size类中释放的堆对象的累积计数。
		Frees uint64
	}
}

mstats和MemStats的区别有:

  • mstats供内部使用,MemStats供外部使用
  • mstats和MemStats的字段大部分是对应的,从by_size(BySize)开始有差别。

在这里插入图片描述

使用

type Garbage struct{ a int }

func notify(f *Garbage) {
	stats := &runtime.MemStats{}
	runtime.ReadMemStats(stats)

	bytes, _ := json.MarshalIndent(stats, "", "    ")
	fmt.Println(string(bytes))

	go ProduceFinalizedGarbage()
}

func ProduceFinalizedGarbage() {
	x := &Garbage{}
	runtime.SetFinalizer(x, notify)
}

func main() {
	go ProduceFinalizedGarbage()

	for {
		runtime.GC()
		time.Sleep(10 * time.Second)
	}
}

完整源码

https://github.com/Wang-Jun-Chao/go-source-read/blob/master/runtime/mstats_go.md

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
<p style="font-size:16px;color:#666666;"> <img src="https://img-bss.csdn.net/202001311426171105.png" alt="" /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">课程目标</span></strong> </p> <p style="font-size:16px;color:#666666;"> 《从零开始学Scrapy网络爬虫》从零开始,循序渐进地介绍了目前流行的网络爬虫框架Scrapy。即使你没有任何编程基础,学习起来也不会有压力,因为我们有针对性地介绍了Python编程技术。另外,《从零开始学Scrapy网络爬虫》在讲解过程中以案例为导向,通过对案例的不断迭代、优化,让读者加深对知识的理解,并通过14个项目案例,提高学习者解决实际问题的能力。 </p> <p style="font-size:16px;color:#666666;"> <br /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">适合对象</span></strong> </p> <p style="font-size:16px;color:#666666;"> 爬虫初学者、爬虫爱好者、高校相关专业的学生、数据爬虫工程师。 </p> <p style="font-size:16px;color:#666666;"> <br /> </p> <p style="font-size:16px;color:#666666;"> <span style="font-size:20px;"><strong>课程介绍</strong></span> </p> <p style="font-size:16px;color:#666666;"> 《从零开始学Scrapy网络爬虫》共13章。其中,第1~4章为基础篇,介绍了Python基础、网络爬虫基础、Scrapy框架及基本的爬虫功能。第5~10章为进阶篇,介绍了如何将爬虫数据存储于MySQL、MongoDB和Redis数据库中;如何实现异步AJAX数据的爬取;如何使用Selenium和Splash实现动态网站的爬取;如何实现模拟登录功能;如何突破反爬虫技术,以及如何实现文件和图片的下载。第11~13章为高级篇,介绍了使用Scrapy-Redis实现分布式爬虫;使用Scrapyd和Docker部署分布式爬虫;使用Gerapy管理分布式爬虫,并实现了一个抢票软件的综合项目。 </p> <p style="font-size:16px;color:#666666;"> <span style="color:#FF0000;">      由于目标网站可能会对页面进行改版或者升级反爬虫措施,如果发现视频中的方法无法成功爬取数据,敬请按照页面实际情况修改XPath的路径表达式。视频教程主要提供理论、方法支撑。我们也会在第一时间更新源代码,谢谢!</span> </p> <p style="font-size:16px;color:#666666;"> <img src="https://img-bss.csdn.net/202001311426306665.png" alt="" /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">课程特色</span></strong> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/202001311426415123.png" alt="" /> </p> <div> <br /> </div>
<div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;">当前课程中商城项目的实战源码是我发布在 GitHub 上的开源项目 newbee-mall (新蜂商城),目前已有 6300 多个 star,</span><span style="color:#4d4d4d;">本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 商城项目功能的讲解,让大家实际操作并实践上手一个大型的线上商城项目,并学习到一定的开发经验以及其中的开发技巧。<br /> 商城项目所涉及的功能结构图整理如下:<br /> </span> </div> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> <img alt="modules" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3N0b3JlL25ld2JlZS1tYWxsLXMucG5n?x-oss-process=image/format,png" /> </p> </div> <p style="color:rgba(0,0,0,.75);"> <strong><span style="color:#e53333;">课程特色</span></strong> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 对新手开发者十分友好,无需复杂的操作步骤,仅需 2 秒就可以启动这个完整的商城项目 </li> <li> 最终的实战项目是一个企业级别的 Spring Boot 大型项目,对于各个阶段的 Java 开发者都是极佳的选择 </li> <li> 实践项目页面美观且实用,交互效果完美 </li> <li> 教程详细开发教程详细完整、文档资源齐全 </li> <li> 代码+讲解+演示网站全方位保证,向 Hello World 教程说拜拜 </li> <li> 技术栈新颖且知识点丰富,学习后可以提升大家对于知识的理解和掌握,可以进一步提升你的市场竞争力 </li> </ul> </div> <p style="color:rgba(0,0,0,.75);">   </p> <p style="color:rgba(0,0,0,.75);"> <span style="color:#e53333;">课程预览</span> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> 以下为商城项目的页面和功能展示,分别为: </p> </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 商城首页 1<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050347585499.gif" /> </li> <li> 商城首页 2<br /> <img alt="" src="https://img-bss.csdn.net/202005181054413605.png" /> </li> <li>   </li> <li> 购物车<br /> <img alt="cart" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvY2FydC5wbmc?x-oss-process=image/format,png" /> </li> <li> 订单结算<br /> <img alt="settle" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvc2V0dGxlLnBuZw?x-oss-process=image/format,png" /> </li> <li> 订单列表<br /> <img alt="orders" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvb3JkZXJzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 支付页面<br /> <img alt="" src="https://img-bss.csdn.net/201909280301493716.jpg" /> </li> <li> 后台管理系统登录页<br /> <img alt="login" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWxvZ2luLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品管理<br /> <img alt="goods" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWdvb2RzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品编辑<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050348242799.png" /> </li> </ul> </div> </div> </div> </div>
<p style="color:#333333;"> <strong> </strong> </p> <p style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="color:#337FE5;">[为什么要学习Spring Cloud微服务]</span> </strong> </p> <p style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="color:#4D555D;"></span> </strong> </p> <p class="ql-long-24357476" style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="font-family:"background-color:#FFFFFF;">SpringCloud作为主流微服务框架,<span style="color:#4D555D;">已成为各互联网公司的首选框架,国内外企业占有率持续攀升,</span>是Java工程师的必备技能。</span><span style="font-family:"background-color:#FFFFFF;">就连大名鼎鼎的阿里巴巴</span><span style="font-family:"background-color:#FFFFFF;">dubbo</span><span style="font-family:"background-color:#FFFFFF;">也正式更名为</span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud Alibaba</span><span style="font-family:"background-color:#FFFFFF;">,成为了</span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud </span><span style="font-family:"background-color:#FFFFFF;">微服务中的一个子模块。</span><span style="font-family:"background-color:#FFFFFF;"></span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud是企业架构转型、个人能力提升、架构师进阶的不二选择。</span> </strong> </p> <p style="color:#333333;"> <strong><strong><br /> </strong> </strong> </p> <strong><span style="font-family:"color:#337FE5;font-size:14px;background-color:#FFFFFF;">【推荐你学习这门课的理由】</span><br /> </strong> <p> <br /> </p> <p> <span>1、</span><span style="color:#222226;font-family:"font-size:14px;background-color:#FFFFFF;">本课程总计</span><span style="background-color:#FFFFFF;">29</span><span style="color:#222226;font-family:"font-size:14px;background-color:#FFFFFF;">课时,<span style="color:#333333;">从微服务是什么、能够做什么开始讲起,绝对的零基础入门</span></span><span></span> </p> <p> <span style="background-color:#FFFFFF;">2、<span style="color:#333333;">课程附带全部26个项目源码,230页高清PDF正版课件</span><span style="color:#333333;"></span></span> </p> <p> <span style="background-color:#FFFFFF;"><b><br /> </b></span> </p> <p> <span style="background-color:#FFFFFF;"><b><span style="color:#337FE5;">【课程知识梳理】</span></b></span> </p> <p> <span style="background-color:#FFFFFF;"><b>1、</b></span><span style="color:#333333;">先讲解了什么是单体架构、什么是微服务架构、他们之间有什么区别和联系,各自有什么优缺点。</span> </p> <p> <span style="color:#333333;">2、</span><span style="color:#333333;">从本质入手,使用最简单的Spring Boot搭建微服务,让你认清微服务是一种思想和解决问题的手段,而不是新兴技术。</span> </p> <p style="color:#333333;"> 3、讲解Spring Boot 与Spring Cloud 微服务架构之间的联系,原生的RestTemplate工具,以及Actuator监控端点的使用。 </p> <p style="color:#333333;"> 4、带着微服务所带来的各种优缺点,为大家引入服务发现与注册的概念和原理,从而引入我们的第一个注册中心服务Eureka。 </p> <p style="color:#333333;"> 5、引入负载均衡的理念,区分什么是服务端负载均衡,什么是客户端负载均衡,进而引入Ribbon负载均衡组件的详细使用。 </p> <p style="color:#333333;"> 6、为了解决微服务之间复杂的调用,降低代码的复杂度,我们引入了Feign声明式客户端,让你几行代码搞定服务的远程调用。 </p> <p style="color:#333333;"> 7、最后为大家介绍了整个微服务体系应该包含什么,学习路线是什么,应该学习什么。 </p> <p style="color:#333333;"> <strong><br /> </strong> </p> <p style="color:#333333;"> <strong><span style="color:#337FE5;">【</span><strong><span style="color:#337FE5;">学习方法</span></strong><span style="color:#337FE5;"></span><span style="color:#337FE5;">】</span></strong> </p> <p style="color:#333333;"> 每一节课程均有代码,最好的方式是静下心来,用一天的时间,或者两个半天时间来学习。 </p> <p style="color:#333333;"> 一边听我的讲解,一边使用我提供的项目代码进行观察和运行。 </p> <p style="color:#333333;"> 只要你能跟住我的节奏,你就可以搞定微服务。 </p> <br />
套餐中一共包含5门程序员必学的数学课程(共47讲) 课程1:《零基础入门微积分》 课程2:《数理统计与概率论》 课程3:《代码学习线性代数》 课程4:《数据处理的最优化》 课程5:《马尔可夫随机过程》 哪些人适合学习这门课程? 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些: ①价值300元编程课程大礼包 ②应用数学优化代码的实操方法 ③数学理论在编程实战中的应用 ④程序员必学的5大数学知识 ⑤人工智能领域必修数学课 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。 如何听课? 1、CSDNapp:我的-我的内容库-我的课程 2、程序员学院app:我的-学习 3、pc端CSDN官网:https://edu.csdn.net/ 我的订阅-收费课 购课后如何领取免费赠送的编程大礼包? 购课后,添加助教微信: csdn590,按提示领取大礼包
<p style="color:#666666;"> <span style="font-size:14px;">本门课程重实战,将基础知识拆解到项目里,让你在项目情境里学知识。</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">这样的学习方式能让你保持兴趣、充满动力,时刻知道学的东西能用在哪、能怎么用。</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">平时不明白的知识点,放在项目里去理解就恍然大悟了。</span> </p> <p style="color:#666666;"> <span></span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>一、融汇贯通</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">本视频采用了前后端分离的开发模式,前端使用Vue.js+Element UI实现了Web页面的呈现,后端使用Python 的Django框架实现了数据访问的接口,前端通过Axios访问后端接口获得数据。在学习完本章节后,真正理解前后端的各自承担的工作。</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>二、贴近实战</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">本系列课程为练手项目实战:学生管理系统v4.0的开发,项目包含了如下几个内容:项目的总体介绍、基本功能的演示、Vuejs的初始化、Element UI的使用、在Django中实现针对数据的增删改查的接口、在Vuejs中实现前端增删改查的调用、实现文件的上传、实现表格的分页、实现导出数据到Excel、实现通过Excel导入数据、实现针对表格的批量化操作等等,所有的功能都通过演示完成、贴近了实战</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>三、课程亮点</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">在本案例中,最大的亮点在于前后端做了分离,真正理解前后端的各自承担的工作。前端如何和后端交互</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>适合人群:</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">1、有Python语言基础、web前端基础,想要深入学习Python Web框架的朋友;</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">2、有Django基础,但是想学习企业级项目实战的朋友;</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">3、有MySQL数据库基础的朋友</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="font-size:14px;"><img alt="" src="https://img-bss.csdnimg.cn/202009070752197496.png" /><br /> </span> </p> <p style="color:#666666;"> <span style="font-size:14px;"><br /> </span> </p>
<p> <span> </span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476"><span style="font-size:14px;"> </span></span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> 人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。 </p> <p class="ql-long-24357476"> <br /> </p> <p class="ql-long-24357476"> 本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; </p> <p> <span></span> </p> <p> <span style="color:#FF9900;"><span><span> </span></span></span> </p> <p class="ql-long-24357476"> <span style="background-color:#FFFFFF;color:#E53333;">【限时福利】</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476">1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包!</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476"><span>2)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。</span><br /> </span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476">---------------------------------------------------------------</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476" style="color:#E53333;">99元=掌握Linux必修知识+社群答疑+讲师社群分享会+700元编程礼包。</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476" style="color:#E53333;"><br /> </span> </p> <p style="font-size:11pt;color:#494949;"> <span> <img alt="" src="https://img-bss.csdn.net/202002140604337221.png" /></span> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏

Wang-Junchao

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值