Golang入门指南


  • 首页

  • todo

  • 思考

  • life

  • food

  • OS

  • lua

  • redis

  • Golang

  • C

  • TCP/IP

  • ebpf

  • p4

  • OpenVPN

  • IPSec

  • L2TP

  • DNS

  • distributed

  • web

  • OpenWRT

  • 运维

  • Git

  • 鸟哥的私房菜

  • IT杂谈

  • 投资

  • About Me

  • 友情链接

  • FTP

  • 搜索
close

理解golang调度之一 :操作系统调度

时间: 2021-04-04   |   分类: go     |   阅读: 4998 字 ~10分钟

原文链接 简介

golang调度器的设计行为能够使你的多线程go程序更有效率、性能更好,这要归功于golang调度器对于操作系统调度器的支持。对于一个golang开发者来说,同时深刻理解操作系统调度和golang调度器工作原理,能够让你的golang程序设计和开发走到正确道路上。 操作系统调度器

操作系统调度器十分复杂,它必须要考虑到底层的硬件结构,包括但不限于处理器数和内核数,cpu cache和NUMA。如果没有这些东西,调度器就没办法尽可能有效的工作。 程序其实就是一系列按顺序执行的机器指令。为了能让其正常干活,操作系统使用了线程的概念。线程会处理和执行分配给它的一系列的机器指令。线程会一直执行这些机器指令,直到没有指令再去执行了。这也是为什么把线程称作"a path of execution"。 每个运行程序都会创建一个进程,每个进程都会有一个初始线程。线程能够创建更多的线程。这些不同的线程独立运行并且调度行为是线程级别决定的,而不是在进程级别。线程能够并发的执行(单独内核上每个线程会轮询占用一段cpu时间),而不是并行执行(在不同内核上同时执行)。线程同时会维持它自己的状态,并且能够在本地安全、独立地执行他自己的指令。这也说明了为什么线程是cpu调度的最小单位。 操作系统调度器,它负责确保在有线程能够运行的时候内核不会空闲下来。它会制造一种假象——所有能够跑的线程此时都在同时执行。为此,调度器需要优先执行高优先级的线程,但是它也必须保证低优先级的线程不会饿死。调度器也必须尽可能将调度延时压倒最少,。 好在许多算法的应用使得调度器更加高效。下面解释一些重要的概念。 执行指令

程序计数器(PC),有时候也叫做指令指针(IP),能够让你找到下一个要执行的指令。大部分的处理器里,PC指向下一个指令。 如果你曾经注意到go程序的追踪栈,你会注意到这些每一行末尾的16进制数字。例如Listing 1里的+0x39和+0x72 Listing 1

阅读全文 »

Golang 中的垃圾回收(一)

时间: 2021-04-03   |   分类: go   go内存详解     |   阅读: 7031 字 ~15分钟

原文链接 垃圾回收器负责追踪堆内存的分配,释放掉不需要的空间,追踪那些还在使用的分配空间。不同编程语言对这个机制的实现都很复杂,但是开发人员开发软件时候并不需要了解垃圾回收太细节的东西就能进行构建。另外,不同发布版本编程语言的VM和runtime也总是在改变和进化。对于应用开发人员来说,重要的是保持一个良好的work模型,了解编程语言里垃圾回收器的行为并且它们是怎么样支持这种行为的。 对于go 1.12版本来说,go语言使用了非分代,并发的三色标记和清扫的回收器。如果想了解如何进行标记和清扫的工作,请参考这篇文章。golang的垃圾回收器的实现每个版本都在更新和进化。因此一旦下个版本发布,讲任何细节的实现都不再准确。 总而言之,这篇文章不会去讲实际的实现细节。我会为你分享回收器的一些行为并且去解释怎样面对这些行为,不考虑实现细节以及未来的改变。这将会使你成为一个更好的golang开发者 堆不是一个容器 我不会把堆看做是一个可以存储或者是释放值的容器。理解这件事情很重要,内存里并没有明确定义了“堆”的一个分界线。任何应用程序预留的内存空间,在堆内存分配上是可用的。给定任何堆内存分配空间,它实际在虚拟内存还是物理内存上的存储位置和我们的模型并没有关联。理解这件事情会帮助你更好的理解垃圾回收模型的工作方式。 回收器行为 当回收开始,回收器会完成三个阶段的工作。这其中两个阶段会产生Stop The World(STW) 延迟,并且另一个阶段也会产生延迟,并且会导致降低应用程序的吞吐量。这三个阶段是:

阅读全文 »

go 垃圾回收:三色算法

时间: 2021-04-03   |   分类: go   面试     |   阅读: 1966 字 ~4分钟

原文链接 三色算法 go垃圾回收器的操作都是基于三色算法,这篇文章主要来说明此算法。

注意:三色算法并不是go独有的,它也会在其它编程语言中使用到

严格来说,在Go中这个算法的官方名称是叫做三色标记清除算法(tricolor mark-and-sweep algorithm)。它可以和程序一起并发工作并且使用写屏障(write barrier)。这就意味着,当Go程序员运行起来,go调度器去负责应用程序的调度,而垃圾回收器会像调度器处理常规应用程序一样,去使用多个goroutines去进行工作。

阅读全文 »

深入 Go Golang 内存分配超级棒的文章:Go 内存分配器可视化指南

时间: 2021-04-03   |   分类: go     |   阅读: 4568 字 ~10分钟

翻译地址 原文链接

当我第一次开始尝试理解 Go 语言的内存分配器时,整个过程让我抓狂。一切看起来都像一个神秘的黑盒子。因为几乎所有技术魔法(technical wizardry)都隐藏在抽象之下,所以你需要一层一层的剥离才能去理解它。

阅读全文 »

go 定时器 ticker和timer

时间: 2021-04-03   |   分类: go     |   阅读: 327 字 ~1分钟

原文链接

两种类型的定时器:ticker和timer。两者有什么区别呢?请看如下代码:

ticker

package main
 
import (
        "fmt"
        "time"
)
 
func main() {
        d := time.Duration(time.Second*2)
        t := time.NewTicker(d)
        defer t.Stop()
 
        for {
                <- t.C
                fmt.Println("timeout...")
        }
}

timeout… timeout… timeout…

阅读全文 »

go 使用protobuf

时间: 2021-04-03   |   分类: go     |   阅读: 1315 字 ~3分钟

原文链接发布于 2017-05-03

为什么要使用protobuf 最近的项目中,一直使用Json做数据传输。Json用起来的确很方便。但相对于protobuf数据量更大些。做一个移动端应用,为用户省点流量还是很有必要的。正好也可以学习一下protobuf的使用

阅读全文 »

How to Use Websockets in go

时间: 2021-04-03   |   分类: go     |   阅读: 3271 字 ~7分钟

原文链接

Sending a message and getting an instant response without refreshing the page is something we take for granted. But in the past, enabling real-time functionality was a real challenge for developers. The developer community has come a long way from HTTP long polling and AJAX and has finally found a solution for building truly real-time apps.

This solution comes in the form of WebSockets, which make it possible to open an interactive session between a user’s browser and a server. WebSockets allow a browser to send messages to a server and receive event-driven responses without having to poll the server for a reply.

阅读全文 »

go系统学习推荐书籍

时间: 2021-04-03   |   分类: go     |   阅读: 5619 字 ~12分钟

Tony Bai

一个程序员的心路历程

  1. Go语言的发展现状 如果从2007年9月20日那个下午三个“程序员大佬”在谷歌总部的一间办公室里进行的一次有关设计一门新编程语言的讨论算起,那么Go语言已经度过了自己的13个年头了。

阅读全文 »
79 80 81 82 83 84 85 86 87

日志
分类
标签
RSS 订阅
GitHub
© 2009 - 2025
粤ICP备2021068940号-1 粤公网安备44011302003059
0%