golang多协程并发工作

package main

import (
"fmt"
"log"
"os"
"sync"
"time"
) type Task struct {
Name string
Age int
} func work(wg *sync.WaitGroup, jobs chan Task, w int, logger *log.Logger) {
defer wg.Done()
for true {
job, ok := <-jobs
if !ok {
break
}
logger.Printf("[%d]name=%s age=%d\n", w, job.Name, job.Age)
}
} func main() { start := time.Now()
file, err := os.OpenFile("info.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
panic(err)
}
defer file.Close()
gLogger := log.New(file, "", log.Ldate|log.Ltime|log.Lshortfile)
gLogger.Println("[main] ready go") wg := &sync.WaitGroup{}
jobs := make(chan Task) workers := 10
for w := 0; w < workers; w++ {
wg.Add(1)
go work(wg, jobs, w, gLogger)
} for i := 0; i < 10000; i++ {
task := Task{
Name: fmt.Sprintf("Name-%d", i),
Age: i,
}
jobs <- task
}
close(jobs)
wg.Wait() gLogger.Printf("[main] done, cost: %s", time.Now().Sub(start)) }

golang多协程并发工作示例的更多相关文章

  1. 在C++中使用golang的协程

    开源项目cpp_features提供了一个仿golang协程的stackful协程库. 可以在c++中使用golang的协程,大概语法是这样的: #include <iostream> v ...

  2. GoLang之协程

    GoLang之协程 目前,WebServer几种主流的并发模型: 多线程,每个线程一次处理一个请求,在当前请求处理完成之前不会接收其它请求:但在高并发环境下,多线程的开销比较大: 基于回调的异步IO, ...

  3. Golang 之协程详解

    转自:https://www.cnblogs.com/liang1101/p/7285955.html 一.Golang 线程和协程的区别 备注:需要区分进程.线程(内核级线程).协程(用户级线程)三 ...

  4. python中的协程并发

    python asyncio 网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程.无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态 ...

  5. Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)

    Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...

  6. 二、深入asyncio协程(任务对象,协程调用原理,协程并发)

      由于才开始写博客,之前都是写笔记自己看,所以可能会存在表述不清,过于啰嗦等各种各样的问题,有什么疑问或者批评欢迎在评论区留言. 如果你初次接触协程,请先阅读上一篇文章初识asyncio协程对asy ...

  7. python3通过gevent.pool限制协程并发数量

    协程虽然是轻量级的线程,但到达一定数量后,仍然会造成服务器崩溃出错.最好的方法通过限制协程并发数量来解决此类问题. server代码: #!/usr/bin/env python # -*- codi ...

  8. windows下多进程加协程并发模式

    好久没更新博客了.正好最近要整理一下最近这段时间做过的项目以及学习python的一些心得.如标题所示,今天就来说说windows下多进程加协程并发模式.其实网上还是蛮多在linux下的多进程加协程并发 ...

  9. Kotlin协程第一个示例剖析及Kotlin线程使用技巧

    Kotlin协程第一个示例剖析: 上一次https://www.cnblogs.com/webor2006/p/11712521.html已经对Kotlin中的协程有了理论化的了解了,这次则用代码来直 ...

  10. Go语言协程并发---管道信号量应用

    package main import ( "fmt" "math" "strconv" "time" ) /* ·10 ...

随机推荐

  1. <HarmonyOS第一课13>给应用添加通知和提醒 #鸿蒙课程##鸿蒙生态#

    课程介绍 <HarmonyOS第一课:给应用添加通知和提醒>将引导开发者如何在HarmonyOS应用中实现通知功能.课程首先介绍如何为您的应用添加基础类型通知,包括普通文本.多行文本和图片 ...

  2. 夸克浏览器PC端功能体验

    一.下载安装 可以看到目前PC端仅仅支持windows,不支持Mac和Linux. 二.功能介绍 夸克浏览器果然很简洁.清新,左侧栏提供首页.网盘.工具.快传四个选项,中间是搜索栏,底部是可定制的天气 ...

  3. 一篇文章给你讲清楚运筹优化到底怎么学!基于 SCIP Optimization Suite 的运筹优化入坑教程

    [!abstract] 本文笔者用暴躁而又不失严谨性的语言,从优化问题的背景入手,强调了针对实际的工程问题开展的优化建模方法和学校教学内容之间的偏差,并围绕优化建模到底应该怎么学的问题,讲解了如何下载 ...

  4. linux安装node.js教程

    我们使用包管理器安装,非常方便. 先看看有哪些版本: dnf module list nodejs 目前最新的是14,那就装14好了: dnf module install nodejs:14 要装啥 ...

  5. [RCTF2015]EasySQL 报错注入与二次注入

    [RCTF2015]EasySQL 报错注入与二次注入 二次注入,可以概括为以下两步: 第一步:插入恶意数据 进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据 ...

  6. ArkUI-X中Plugin生命周期开发指南

    ArkUI-X插件用于拓展ArkUI应用的能力,提供管理插件生命周期的能力.本文主要介绍Android平台的ArkUI-X插件生命周期的使用. Android平台创建ArkUI-X插件生命周期 在An ...

  7. 通义灵码2.5+qwen3——节假日抢票不用愁,基于12306-MCP实现个人火车票智能查询小助手!

    ​ 在日常生活中,12306 是中国铁路售票系统的官方平台.为了提升购票效率.自动化查询余票信息以及获取车站代码等功能,我们希望通过使用智能体编程方式,结合 MCP(Model-as-a-Servic ...

  8. 关于打高版本java,cc6复现

    关于打高版本java,cc6复现 从上一篇的cc1中我们发现他不能作用在jdk_8u71以上的版本,因此;为了解决这个问题,引入了cc6 之所以不能用cc1打高版本,是由于在Java 8u71以后, ...

  9. [原创]《C#高级GDI+实战:从零开发一个流程图》第01章:有什么用、有什么效果?

    一.有什么用? 问:现在这个年代哪些场景还需要GDI+? 答:很少,主要是在上位机,复杂一点的自定义控件几乎全由GDI+绘制而成.而且很多工业设备的电脑性能差,WPF等带不起来,只能是Winform. ...

  10. ​微软 AI Agent三剑客:AutoGen、Semantic Kernel与MEAI的协同演进

    引言 微软正在积极构建其人工智能(AI)开发者生态系统,旨在为开发者提供从实验研究到生产部署的全方位支持.在这一宏大蓝图中,AutoGen.Semantic Kernel (SK) 和 Microso ...