ICode9

精准搜索请尝试: 精确搜索
  • Golang sync/atomic包——原子操作2022-01-18 20:33:48

    1、概述 1.1 基本概念 原子性:一个或多个操作在CPU的执行过程中不被中断的特性,称为原子性。这些操作对外表现成一个不可分割的整体,他们要么都执行,要么都不执行,外界不会看到他们只执行到一半的状态。 原子操作:进行过程中不能被中断的操作,原子操作由底层硬件支持,而锁则是由操作系统

  • 上古神器WireGuard异地高效率组网2022-01-11 17:34:09

    简介 WireGuard 是一个易于配置、快速且安全的开源 VPN,它利用了最新的加密技术。目的是提供一种更快、更简单、更精简的通用 VPN,它可以轻松地在树莓派这类低端设备到高端服务器上部署。他没有像OpenVPN那样10w的代码量,WireGuard非常精简只有4000行代码。 官网 地址:https://www

  • go-基础-任务池-sync.WaitGroup2022-01-06 09:34:41

    package main import ( "fmt" "sync" "time" ) func worker(id int) { fmt.Printf("Worker %d starting\n", id) time.Sleep(time.Second) fmt.Printf("Worker %d done\n", id) } func main() { // 多任务进程组处理器

  • GRPC流模式2022-01-02 19:01:07

    简单模式 又称为一元 RPC,类似于常规的 http 请求,客户端发送请求,服务端响应请求   服务端流模式 stream.proto syntax = "proto3"; option go_package=".;proto"; service Greeter { rpc GetStream(StreamReqData) returns (stream StreamResData) {} // 服务端流模式 rpc

  • Golang面试题: 3个goroutine交替打印ABC2021-12-03 11:02:01

    文章目录 题目介绍做法一题目扩展 开心一刻        一位小帅哥和靓姑娘在火车上相遇。经过一阵“天南地北,生猛海鲜”之后,小帅哥拿出一副扑克与姑娘对玩:   帅哥:QQK?(谈谈看)   姑娘:Q45?(谈什么)   帅哥:Q21!(谈恋爱)   姑娘:8Q!!(不谈)   $%……!   快到站了,小帅哥不甘心,

  • Golang sync.WaitGroup 源码分析2021-11-27 03:00:07

    结构 // WaitGroup类型的数据不可以被复制 type WaitGroup struct { noCopy noCopy // 用来禁止当前结构的类型复制 // state1 是 64-bit变量: // 高32位是计数器counter,也就是活跃的g的个数 // 低32位表示因执行Wait()而阻塞的g的数量,即waiters // state2

  • swoole 协程2021-11-17 14:33:56

    <?php Co\run(function () { $wg = new \Swoole\Coroutine\WaitGroup(); $result = []; $wg->add();//协程数量加1 $time = microtime(true); //启动第一个协程 go(function () use ($wg, &$result) {//use 关键字 函数闭包 调用外部变量

  • [GO]sync.WaitGroup作用及使用2021-11-10 21:03:27

    sync.WaitGroup是被设计用来实现同步问题的一个函数。 WaitGroup维护一个计数器,初始为0。 它有三个方法来对计数器进行操作或判断:Add(), Done(), Wait() 1.Add(n) 把计数器设置为n 2.Done() 每次把计数器-1 3.wait() 会阻塞代码的运行,直到计数器地值减为0。 给出雨痕大佬的例子: fu

  • golang中的runtime包2021-11-04 14:33:33

    1. runtime.Gosched  让出CPU时间片,重新等待安排任务 package main import ( "fmt" "runtime" ) func main() { go func(s string) { for i :=0; i < 2; i++ { fmt.Println(s) runtime.Gosched() // 让出CPU时间片,重新等带安排任务 } }("world")

  • Go并发控制-WaitGroup简用2021-10-30 17:34:25

    在Go语言,实现同步的一种方式就是WaitGroup。 package main import ( "fmt" "time" ) func main(){ for i := 0; i < 1000; i++ { go fmt.Println(i) } time.Sleep(time.Second) }  主线程为了等待goroutine都运行完毕,不得不在程序的末尾使用time.Sleep() 来睡眠一段时

  • Go并发控制2021-10-23 16:32:47

    并发控制 "多线程"编程的最重要的两个点就是,"线程"间通信以及并发控制。(这里线程泛指各自独立运行的code) 什么是并发控制呢?线程在各自运行的时候由于他们之间是隔离的,对于它们执行到哪一步我们是无感的,但是在一些场合下,我们需要对某些线程的执行进行控制,比如关闭线程,暂停线程,这

  • golang查看是否并发资源竞争2021-10-21 13:00:15

    ☁ test3 go run --trace main.goflag provided but not defined: -traceusage: go run [build flags] [-exec xprog] package [arguments...]Run 'go help run' for details.☁ test3 go run -race main package main is not in GOROOT (/usr/local/go/src/ma

  • Go语言基础之defer语句2021-10-16 23:02:49

    Go语言基础之defer语句 Go语言中的defer语句会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处理的语句按defer定义的逆序进行执行,也就是说,先被defer的语句最后被执行,最后被defer的语句,最先被执行。 举个例子: func main() { fmt.Println("start") d

  • 【Glolang】 关于Go语言中的锁2021-10-03 13:01:30

    在 Golang 里有专门的方法来实现锁,就是 sync 包,这个包有两个很重要的锁类型 一个叫 Mutex, 利用它可以实现互斥锁。一个叫 RWMutex,利用它可以实现读写锁。 特别说明: sync.Mutex 的锁是不可以嵌套使用的 sync.RWMutex 的 RLock()是可以嵌套使用的 sync.RWMutex 的 mu.Lock()

  • linux- wrk 测试并发工具2021-09-28 11:35:14

    https://github.com/wg/wrk   apt install unzip -yapt-get install build-essential libssl-dev git -yapt install makegit clone https://github.com/wg/wrk.gitcd wrk/makecp wrk /usr/local/bin           wrk -t12 -c400 -d30s --latency http://www.sina.com This ru

  • golang-panjf2000/ants 协程池实际使用小结2021-09-26 14:00:55

    原文链接:https://studygolang.com/articles/27181 //注意 //线程池执行有两种,一种执行普通逻辑方法pool,可接受所有方法,另一种执行形同类型的方法(就是每次接收的内容方法都一样) //使用前需要先建立一个对应的pool对象,参数是容量大小和过期时间等, 如果使用普通方法,有默认方法可以

  • Go的goroutine与sync.WaitGroup的初步使用2021-09-20 20:35:33

    goroutine的使用以及sync.WaitGroup emmm,没啥好介绍的,就简单的使用。 package main import ( "fmt" "sync" ) //协程计数器 var wg sync.WaitGroup func main() { fmt.Println("嘻嘻") for i := 0; i < 5; i++ { wg.Add(1)//协程计数器加1

  • golang通知协程退出2021-09-15 18:02:22

    /* 一个安全关闭的的协程模型 */ type MyChannel struct { C chan struct{} once sync.Once } func NewMyChannel() *MyChannel { return &MyChannel{C: make(chan struct{})} } func (mc *MyChannel) SafeClose() { mc.once.Do(func() { close(mc.C) }) } 使用wait

  • golang,函数参数传递的sync.Mutex不是指针会怎么样2021-09-09 11:32:14

    package main import ( "fmt" "sync")var a = 1func main() { lock := sync.Mutex{} wg := &sync.WaitGroup{} wg.Add(2) go t(lock,wg) go t(lock,wg) wg.Wait() fmt.Println(a)} func t(lock sync.Mutex, wg *sync.WaitGroup){ defer wg.Done() loc

  • golang-sync.Map2021-09-07 21:58:16

    sync.Map,不需要用make初始化 单纯的用map开启goroutine是不安全的,如: package main import ( "fmt" "strconv" "sync" ) var m = make(map[string]int) var lock sync.Mutex func get(key string)int{ return m[key] } func set(key string, value int)

  • web 9.42021-09-04 09:31:14

    表单 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> Test03 </title> </head> <body> <body background="https://w.wallhaven.cc/full/g7/wallhaven-g75r7d.jpg"> &

  • GO-Panic情况总结2021-08-02 21:02:00

    Panic 1/数组切片越界 2/空指针调用 3/提早关闭HTTP响应体 4/除以零 5/向已关闭的通道发消息 6/重复关闭通道 7/关闭未初始化的通道 8/未初始化map 9/跨协程的恐慌处理 10/sync计数为负值 func main(){ wg := sync.WaitGroup{} wg.Add(-1) wg.Wait() }

  • chan应用:2021-07-29 23:00:05

    go实现主线程等待子线程都运行完再退出 方式1: package main import ( "fmt" ) func main() { ch := make(chan struct{}) count := 2 // count 表示活动的协程个数 go func() { fmt.Println("Goroutine 1") ch <- struct{}{} // 协程结束,发出信号 }() go func() {

  • go多线程函数编写2021-07-25 17:01:13

    go 多线程函数编写 在go中,如果需要编写多线程,参考代码如下: var wg sync.WaitGroup wg.Add(3) go func() { defer wg.Done() for { /* print your code */ } }() go func() { defer wg.Done() for { /* print your code */ } }() go fu

  • EasyDSS转码模块关于gRPC服务注册到ETCD的实现过程2021-07-22 16:31:25

    在上一篇分享博客中,我们讲了EasyDSS负载均衡模块的优化由nginx方式变更为etcd方式,大家可以了解一下:如何通过ETCD实现EasyDSS分布式负载均衡?因此相应的转码模块的gRPC服务端及客户端的代码也要做一定的修改。 在etcd的代码层面,无论是客户端或是服务器端都有了一定程度的复杂,但后

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

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

ICode9版权所有