package main import ( "database/sql" "fmt" "math/rand" "strings" "sync" "time" _ "github.com/go-sql-driver/mysql" ) type Tag struct { ID int `json:"id"` Name string `json:"name"` } type Job struct { id int name string } type Result struct { job Job sumofdigits int } var jobs = make(chan Job, 10) var results = make(chan Result, 10) func initData(name string) int { db, err := sql.Open("mysql", "root:linuxer@tcp(127.0.0.1:3306)/study") if err != nil { panic(err.Error()) } defer func() { db.Close() }() strSql := strings.Join([]string{"INSERT INTO t(name) VALUES('", name, "')"}, "") fmt.Println(strSql) _, err = db.Query(strSql) // handle error if err != nil { panic(err) } fmt.Print("Successfully Inserted\n") return 0 } func worker(wg *sync.WaitGroup) { for job := range jobs { output := Result{job, initData(job.name)} results <- output } wg.Done() } func createWorkerPool(noOfWorkers int) { var wg sync.WaitGroup for i := 0; i < noOfWorkers; i++ { wg.Add(1) go worker(&wg) } wg.Wait() close(results) } func allocate(noOfJobs int) { for i := 0; i < noOfJobs; i++ { name := RandStringBytes(5) job := Job{i, name} jobs <- job } close(jobs) } func result(done chan bool) { for result := range results { fmt.Printf("Job id %d, input random no %d , sum of digits %d\n", result.job.id, result.job.name, result.sumofdigits) } done <- true } const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" func RandStringBytes(n int) string { b := make([]byte, n) for i := range b { b[i] = letterBytes[rand.Intn(len(letterBytes))] } return string(b) } func main() { startTime := time.Now() noOfJobs := 20 go allocate(noOfJobs) done := make(chan bool) go result(done) noOfWorkers := 3 createWorkerPool(noOfWorkers) <-done endTime := time.Now() diff := endTime.Sub(startTime) fmt.Println("total time taken ", diff.Seconds(), "seconds") }
golang 协程池并发插入数据
来源:这里教程网
时间:2026-03-01 16:50:19
作者:
编辑推荐:
- Golang操作mysql简单示例03-01
- golang 协程池并发插入数据03-01
- mysql8.0源码一键安装脚本03-01
- linux 基于YUM方式部署MYSQL8.003-01
- mysql8.0.30的RPM包安装方法03-01
- 教你如何将二进制文件导入到数据库03-01
- MySQL Redo log页内逻辑怎么理解03-01
- MySQL 唯一索引范围查询锁下一个记录的理解03-01
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- linux 基于YUM方式部署MYSQL8.0
linux 基于YUM方式部署MYSQL8.0
26-03-01 - 教你如何将二进制文件导入到数据库
教你如何将二进制文件导入到数据库
26-03-01 - MySQL Redo log页内逻辑怎么理解
MySQL Redo log页内逻辑怎么理解
26-03-01 - 一个并发SQL数据库卡主了
一个并发SQL数据库卡主了
26-03-01 - 一次分区查询异常的分析
一次分区查询异常的分析
26-03-01 - 数据库主键一定要自增的吗?有哪些场景下不建议自增?
数据库主键一定要自增的吗?有哪些场景下不建议自增?
26-03-01 - 两个事务并发写,能保证数据唯一吗?
两个事务并发写,能保证数据唯一吗?
26-03-01 - mysql主库更新后,从库都读到最新值了,主库还有可能读到旧值吗?
mysql主库更新后,从库都读到最新值了,主库还有可能读到旧值吗?
26-03-01 - mysql数据库查询好慢,除了索引,还能因为什么?
mysql数据库查询好慢,除了索引,还能因为什么?
26-03-01 - 天天写 SQL,这些神奇的特性你知道吗?
天天写 SQL,这些神奇的特性你知道吗?
26-03-01
