ICode9

精准搜索请尝试: 精确搜索
  • Go语言goroutine调度器初始化 十二2021-03-29 15:01:09

    以下内容转载自 https://mp.weixin.qq.com/s/W9D4Sl-6jYfcpczzdPfByQ 原创 爱写程序的阿波张 源码游记 2019-05-05 本文是《Go语言调度器源代码情景分析》系列的第12篇,也是第二章的第2小节。   本章将以下面这个简单的Hello World程序为例,通过跟踪其从启动到退出这一完整

  • 非main goroutine的退出及调度循环(15)2021-03-26 20:03:38

    以下内容转载自 https://mp.weixin.qq.com/s/XttP9q7-PO7VXhskaBzGqA 原创 爱写程序的阿波张 源码游记 2019-05-12 本文是《Go语言调度器源代码情景分析》系列的第15篇,也是第二章的第5小节。 上一节我们说过main goroutine退出时会直接执行exit系统调用退出整个进程,而非mai

  • 第三章 Goroutine调度策略(16)2021-03-26 20:02:56

    以下内容转载自 https://mp.weixin.qq.com/s/2objs5JrlnKnwFbF4a2z2g 原创 爱写程序的阿波张 源码游记 2019-05-14 本文是《Go语言调度器源代码情景分析》系列的第16篇,也是第三章《Goroutine调度策略》的第1小节。   在调度器概述一节我们提到过,所谓的goroutine调度,是指程

  • Go语言调度器之盗取goroutine(17)2021-03-26 20:01:23

    以下内容转载自 https://mp.weixin.qq.com/s/o2UmxmFFOwUAkgE-Ao9MsA 原创 爱写程序的阿波张 源码游记 2019-05-17 本文是《Go语言调度器源代码情景分析》系列的第17篇,也是第三章《Goroutine调度策略》的第2小节。   上一小节我们分析了从全局运行队列与工作线程的本地运

  • 协程泄漏之gops使用解析2021-03-25 15:29:20

    1、协程泄漏问题 如果你启动了一个goroutine,但并没有按照预期的一样退出,直到程序结束,此goroutine才结束,这种情况就是 goroutine 泄露。当 goroutine 泄露发生时,该 goroutine 的栈一直被占用而不能释放,goroutine 里的函数在堆上申请的空间也不能被垃圾回收器回收。这样,在程序

  • Golang略偏底层深入面试题2021-03-23 20:57:28

    剑指offer-二叉树中和为某一值的路径   channel底层实现、如何实现并发安全   goroutine和线程的区别,为什么说goroutine轻量   defer关键字后的函数在什么时候调用 主函数return前还是return后   场景题:使用top命令观察一个主动malloc申请了1g内存的进程   tcp ip 三握四挥

  • go中sync.Mutex源码解读2021-03-15 09:32:42

    互斥锁 前言 什么是sync.Mutex 分析下源码 Lock 位运算 Unlock 总结 参考 互斥锁 前言 本次的代码是基于go version go1.13.15 darwin/amd64 什么是sync.Mutex sync.Mutex是Go标准库中常用的一个排外锁。当一个goroutine获得了这个锁的拥有权后, 其它请求锁的goroutine

  • sync mutex golang2021-03-10 19:30:36

    互斥锁Mutex实现: 参考代码分析:https://www.jianshu.com/p/ce1553cc5b4f 大致介绍 sema 是一个互斥的信号量,初始默认值是 0,用于将 goroutine park 休眠或是唤醒。sema acquire 时如果 sema 大于 0,那么减一返回,否则休眠等待。sema release 将 sema 加一,然后唤醒等待队列的第一

  • go中errgroup源码解读2021-03-08 16:34:57

    errgroup 前言 如何使用 实现原理 WithContext Go Wait 错误的使用 总结 errgroup 前言 来看下errgroup的实现 如何使用 func main() { var eg errgroup.Group eg.Go(func() error { return errors.New("test1") }) eg.Go(func() error { return errors.New("test2

  • 如何限制goroutine的数量2021-03-03 16:04:30

    为什么要控制goroutine的数量? 在我们开发过程中,如果不对goroutine加以控制而进行滥用的话,可能会导致服务整体崩溃。比如耗尽系统资源导致程序崩溃,或者CPU使用率过高导致系统忙不过来。 用什么方法控制goroutine的数量? 尝试 chan func main() { userCount := 10 ch := make(cha

  • Jochen的goland小抄-进阶篇-并发编程(更新中......)2021-03-03 02:02:27

    小抄系列进阶篇涉及的概念较多,知识点重要,故每块知识点独立成篇,方便日后笔记的查询 本篇的主题是:并发编程 go语言在当初推出时,最大的亮点就是其高并发的便捷性,其实现需要依靠协程(有的需要需要靠线程、进程) 什么是并发 我们前面写的程序都是从上至下按顺序执行的,像这样的程序如果

  • 极客大学Go 进阶训练营2021-02-26 19:02:00

    极客大学Go 进阶训练营 \/ itspcool 交流学习 Go语言是google推出的一个静态编译型语言,目标是取代C、C++、Java作为系统开发的语言。开发者很多都是来自贝尔实验室的大神。Go语言包含了很多非常酷的语言特性,值得尝试。 目前Google、盛大、金山、百度等公司已经开始使用Go语言开

  • 模块二 GO语言进阶技术-go语句及其执行规则(上)2021-02-25 20:32:43

    你很棒,已经学完了关于 Go 语言数据类型的全部内容。我相信你不但已经知晓了怎样高效地使用 Go 语言内建的那些数据类型,还明白了怎样正确地创造自己的数据类型。 对于 Go 语言的编程知识,你确实已经知道了不少了。不过,如果你真想玩转 Go 语言还需要知道它的一些特色流程和语法。 尤

  • golang sync.Mutex互斥锁的实现原理2021-02-19 14:31:50

    数据结构与状态机Lock (1)正常模式(2) 饥饿模式Unlock sync.Mutex是一个不可重入的排他锁。 这点和Java不同,golang里面的排它锁是不可重入的。 当一个 goroutine 获得了这个锁的拥有权后, 其它请求锁的 goroutine 就会阻塞在 Lock 方法的调用上,直到锁被释放。 数据结构与状态机 s

  • Go入门系列(十七) go并发之基于共享变量的并发2021-02-16 16:30:55

    本系列文章目录 展开/收起 Go入门系列(一) 初识Go语言Go入门系列(二) 变量、指针、数据类型简介和作用域Go入门系列(三) 基础类型——整型、浮点型、布尔类型和字符串Go入门系列(四) 数组Array和切片SliceGo入门系列(五) 哈希表mapGo入门系列(六) 结构体structGo入门系

  • 更便捷的goroutine控制利器- Context2021-02-10 20:29:21

    首先要和大家说声抱歉哈,由于工作上、生活上的某些琐事,以至于造成本节的断更。不过请不要悲伤。因为我在这期间也是做过详细的复习的。我相信一定会让你有更加深入的理解,同时也欢迎你向我提出不足。我们共同进步。话不多说,我相信你已经迫不及待了。还在等什么?let‘s GO 在本文

  • 说说Golang goroutine并发那些事儿2021-02-09 10:02:58

    摘要:今天我们一起盘点一下Golang并发那些事儿。 Golang、Golang、Golang 真的够浪,今天我们一起盘点一下Golang并发那些事儿,准确来说是goroutine,关于多线程并发,咱们暂时先放一放(主要是俺现在还不太会,不敢出来瞎搞)。关于golang优点如何,咱们也不扯那些虚的。反正都是大佬在说,俺只

  • go语言进阶-并发2021-01-28 18:03:59

    title: go语言进阶-并发 date: 2020-09-01 19:58:37 文章目录 0. 前言1. 并发与并行2. 进程 线程 协程3. Goroutine4. Go 并发调度器模型 G-P-M5. Go 并发应用6. Go 并发同步模型 CSP7. channel 通道7.1. 无缓冲通道7.2. 有缓冲通道 8. Go 实现同步8.1. 实现互斥8.1.1.

  • Go并发之Channel的简单示例2021-01-22 13:01:55

    编号1,2,3,4 的goroutine 每秒顺序打印 1,2,3,4 的编号 package main import ( "fmt" "time" ) //编号1,2,3,4 的goroutine 每秒顺序打印 1,2,3,4 的编号 type Token struct { } func worker(id int,ch chan Token,nextChan chan Token){ for{ token := <- ch

  • go Panic & Recover2021-01-21 18:33:44

    Panic Go 的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、空指针引用等。这些运行时错误会引起painc异常。 一般而言,当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer 机制)。随后,程序崩溃并输出日志信息。日志信息

  • 一道有趣的golang排错题2021-01-18 10:02:20

    很久没写博客了,不得不说go语言爱好者周刊是个宝贝,本来想随便看看打发时间的,没想到一下子给了我久违的灵感。 go语言爱好者周刊78期出了一道非常有意思的题目。 我们来看看题目。先给出如下的代码: package main import ( "fmt" "time" ) func main() { ch1 := make(c

  • 聊聊 g02021-01-16 23:32:29

    很多时候,当我们跟着源码去理解某种事物时,基本上可以认为是以时间顺序展开,这是编年体的逻辑。还有另一种逻辑,纪传体,它以人物为中心编排史事,使得读者更聚焦于某个人物。以一种新的视角,把所有的事情串连起来,令人大呼过瘾。今天我们试着以这样一种逻辑再看 g0。 回顾一下 Go 夜读第 78

  • Golang笔记: channel2021-01-14 15:02:54

    Golang笔记: channel 定义channel 基本特性数据结构Chan使用创建chan向chan中写入数据从chan中读取数据Chan关闭sendq、recvq G释放释放接收方释放发送方协程调度 channel send/recv 分析sendrecv 细节参考博客 定义 不要通过共享内存来通信,而是通过通信来实现内存共享

  • goroutine基于线程池的P:M:G协程模型2021-01-07 16:35:46

    goroutine基于线程池的P:M:G协程模型 首先说明一下go可以有两种并发方式 csp 也就是最常使用的go并发模式,这中模式无信息的直接交换,所以go中运用了chanel来交换数据 共享内存 通常意义上可以理解为通过共享了内存进而来通信的并发方式,例如加lock 这种模式可以直接交换数据,但是

  • go语言初探 十三2020-12-26 23:32:42

    并发编程 并发与并行 Erlang 之父 Joe Armstrong曾经以下图解释并发与并行。 并发在图中的解释是两队人排队接咖啡,两队切换。 并行是两个咖啡机,两队人同时接咖啡。 “Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有