golang多协程并发工作示例
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多协程并发工作示例的更多相关文章
- 在C++中使用golang的协程
开源项目cpp_features提供了一个仿golang协程的stackful协程库. 可以在c++中使用golang的协程,大概语法是这样的: #include <iostream> v ...
- GoLang之协程
GoLang之协程 目前,WebServer几种主流的并发模型: 多线程,每个线程一次处理一个请求,在当前请求处理完成之前不会接收其它请求:但在高并发环境下,多线程的开销比较大: 基于回调的异步IO, ...
- Golang 之协程详解
转自:https://www.cnblogs.com/liang1101/p/7285955.html 一.Golang 线程和协程的区别 备注:需要区分进程.线程(内核级线程).协程(用户级线程)三 ...
- python中的协程并发
python asyncio 网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程.无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态 ...
- Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)
Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...
- 二、深入asyncio协程(任务对象,协程调用原理,协程并发)
由于才开始写博客,之前都是写笔记自己看,所以可能会存在表述不清,过于啰嗦等各种各样的问题,有什么疑问或者批评欢迎在评论区留言. 如果你初次接触协程,请先阅读上一篇文章初识asyncio协程对asy ...
- python3通过gevent.pool限制协程并发数量
协程虽然是轻量级的线程,但到达一定数量后,仍然会造成服务器崩溃出错.最好的方法通过限制协程并发数量来解决此类问题. server代码: #!/usr/bin/env python # -*- codi ...
- windows下多进程加协程并发模式
好久没更新博客了.正好最近要整理一下最近这段时间做过的项目以及学习python的一些心得.如标题所示,今天就来说说windows下多进程加协程并发模式.其实网上还是蛮多在linux下的多进程加协程并发 ...
- Kotlin协程第一个示例剖析及Kotlin线程使用技巧
Kotlin协程第一个示例剖析: 上一次https://www.cnblogs.com/webor2006/p/11712521.html已经对Kotlin中的协程有了理论化的了解了,这次则用代码来直 ...
- Go语言协程并发---管道信号量应用
package main import ( "fmt" "math" "strconv" "time" ) /* ·10 ...
随机推荐
- servlet 作用域
作用域总结 HttpServletRequest:一次请求,请求响应之前有效 HttpSession:一次会话开始,浏览器不关闭或不超时之前有效 ServletContext:服务器启动开始,服务器停 ...
- 【HUST】攻防实践|中间人攻击netcat通信过程
更新(略微整理了一下行文逻辑的版本):[HUST]网络攻防实践|TCP会话劫持+序列号攻击netcat对话_shandianchengzi的博客-CSDN博客_tcp序列号攻击是如何实现的. 旧版博客 ...
- Pandas 清除 Excel 特殊字符
清除 Excel 特殊字符 主要是为了做一个笔记, 用 遍历 DataFrame 用正则匹配特殊字符并替换. 是上个月初的项目了, 其中有个将 Excel 传入数据库的时候, 发现有特殊字符, 很奇怪 ...
- C语言一点五编程实战:纯 C 的模块化×继承×多态框架
本文将大量涉及C语言高级操作,如函数指针.结构体指针.二级指针.指针频繁引用解引用.typedef.static.inline和C语言项目结构等知识,请确保自己不会被上述知识冲击,如果没有这顾虑,请尽 ...
- Data aggregation and group operations in pandas
Data aggregation and group operations in pandas After loading,merging and preparing a dataset,you ma ...
- 使用 frp 进行内网穿透
frp 是一个开源的内网穿透工具,可以使外网设备访问内网防火墙后的设备/服务器. 比如可以买一个 99元/年 的阿里云低配 ECS,然后把自己相对高配的旧电脑放在家里. 家里的旧电脑通过 frp 连上 ...
- 2023人形全能赛竞速机器人mega代码
mega // @Author : Hcm #include <LobotServoController.h> // 舵机板通信 #include <OneButton.h> ...
- JDBC连接数据库增删改查实例
查询所有 dao层代码: package example; import java.sql.Connection; import java.sql.DriverManager; import java ...
- 18-利用GPU训练
1. 利用GPU训练(方式一) ① GPU训练主要有三部分,网络模型.数据(输入.标注).损失函数,这三部分放到GPU上. import torchvision import torch from t ...
- HyperWorks使用六面体和三棱柱单元进行实体网格剖分
本节将演示如何使用 solid map 功能对一个复杂的几何实体进行网格剖分.剖分的思路是:首先对该实体进行适当的切割,以使其各个部分均处于 mappable 的状态:然后分别对各个子块进行 soli ...