go开启多进程——拆分多个进程同时处理(分而治之)
使用了goroutine实现了多线程,使用chan来控制多线程。
runtime.GOMAXPROCS(3)来设置最大的原生线程。
runtime.Gosched() 显式地让出CPU时间给其他goroutine
代码如下:
package main import (
"fmt"
"runtime"
) var quit chan int = make(chan int) func print10to19( split_index int) {
fmt.Println("Start******print10to19 ")
for i := ; i <= split_index; i++ {
// 显式地让出CPU时间给其他goroutine
runtime.Gosched()
fmt.Println("******10to19: ", i)
}
fmt.Println("End******print10to19 ")
quit <-
} func print20to29(split_index int ) {
fmt.Println("Start======print20to29 ")
for i := split_index ; i <= ; i++ {
// 显式地让出CPU时间给其他goroutine
runtime.Gosched()
fmt.Println("======20to29: ", i)
}
fmt.Println("End======print20to29 ")
quit <-
} func print30to39() {
fmt.Println("Start######print30to39 ")
for i := ; i < ; i++ {
// 显式地让出CPU时间给其他goroutine
runtime.Gosched()
fmt.Println("######30to39: ", i)
}
fmt.Println("End######print30to39 ")
quit <-
} func main() {
// 设置最大开n个原生线程
runtime.GOMAXPROCS() fmt.Println("start ---") split_index := split_token() go print10to19(split_index)
go print20to29(split_index + )
// go print30to39() // go print10to19(begin1,end1)
// go print20to29(begin2,end2)
fmt.Println("start ===")
for i := ; i < ; i++ {
sc := <-quit
fmt.Println("sc:", sc)
} fmt.Println("end")
} // 拆分设备组
func split_token() int{ // redisMaster := midware.NewPRedis(config.Config.GetString("REDIS_MASTER"))
// group_len, err := redisMaster.ZCard(str.GID) // 获取redis组的设备总数 // 测试:拆分成2个协程
// split_task(2,0,group_len)
res := split_task(,,)
return res
} func split_task(N int, WholeBegin int, WholeEnd int) int{ res := (WholeEnd - WholeBegin) / N switch res {
case :
fmt.Printf("0....%s",WholeEnd)
default:
fmt.Printf("Default012", res)
} return res
}

运行程序:
可以看出,进程1跑的是0——21,进程2跑的是22——43,
这里拆分成2个进程。可根据自己的需求,拆分成多个进程处理。多个进程同时跑拆分一个大的group组的数据。
这种场景是:一个很大的数据表,若M个亿的数据,要是开启单进程执行的话,可能需要时间T;
但要是开启多N个进程,拆分这个M个亿的数据,相当于每个进程同时在处理M/N 的数据,分而治之的处理一个很大的数据量。
go开启多进程——拆分多个进程同时处理(分而治之)的更多相关文章
- 第十五章、python中的进程操作-开启多进程
目录 第十五章.python中的进程操作-开启多进程 一.multprocess模块 二.multprocess.process模块 三.Process()对象方法介绍 四.Process()对象属性 ...
- Python程序中的进程操作--—--开启多进程
Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...
- 2013/11/21工作随笔-PHP开启多进程
今天被问到一个问题,php如何开启多进程才比较稳定. php开启多进程执行一个操作有哪些方法: 首先想到的是使用pcntl的fork 具体可以参考之前的文章:PHP的pcntl多进程 其次想到的方法是 ...
- 第二章IPC——IPC与开启多进程
问题 一.IPC ①.什么是IPC ②.为什么要有IPC 二.多进程 ①.如何开启多进程 ②.系统如何创建多进程 三.多进程引发的问题 问:私有进程(利用":+进程名")能否共 ...
- Android IPC机制(一)开启多进程
1. 为何要开启多进程 为何开启android应用要开启多进程,主要有以下几点: 单进程所分配的内存不够,需要更多的内存.在早期android系统只为一个单进程的应用分配了16M的可用内存,随着手机的 ...
- Flask 开启多进程或多线程
2018-07-15 23:31:20 yang9315 阅读数 7703更多 分类专栏: python 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接 ...
- day34 并行并发、进程开启、僵尸及孤儿进程
day34 并行并发.进程开启.僵尸及孤儿进程 1.并行与并发 什么是并行? 并行指的是多个进程同时被执行,是真正意义上的同时 什么是并发? 并发指的是多个程序看上去被同时执行,这是因为cpu在多个程 ...
- Python多进程库multiprocessing中进程池Pool类的使用[转]
from:http://blog.csdn.net/jinping_shi/article/details/52433867 Python多进程库multiprocessing中进程池Pool类的使用 ...
- php-fpm 如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。
php-fpm未优化网友反映的问题 1.最近将Wordpress迁移至阿里云.由于自己的服务器是云服务器,硬盘和内存都比较小,所以内存经常不够使,通过ps ax命令查看后,发现启动php-fpm进程数 ...
随机推荐
- 【SQL Server学习笔记】事务、锁定、阻塞、死锁 sys.sysprocesses
http://blog.csdn.net/sqlserverdiscovery/article/details/7712068 Column name Data type Description ...
- 取代Promise的Generator生成器函数
接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还有一种常用的解决方案,它就是Ge ...
- Debian安装VirtualBox增强工具
切换到root用户: apt-get install build-essential 或者 apt-get install gcc make apt-get install dkms apt-get ...
- JET 调用后端Rest Service
调用Rest Service可以基于两种方式: 一种是oj.Collection.extend 一种是$.ajax CORS问题 但在调用之前,首先需要解决rest service的CORS问题.(跨 ...
- Oracle架构全图
- Render Texture coordinates
https://docs.unity3d.com/550/Documentation/Manual/SL-PlatformDifferences.html Render Texture coordin ...
- vue-resource的使用中需要注意的坑
先看一段代码: export default { name: 'app', data() { return { articles: [] } }, created: function() { this ...
- storm安装配置
1.修改主机名: vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=MASTER 2.修改IP: 先用ifconfig得到ip信息,将其复制 设置i ...
- builder pattern
design patterns 结合书本和这个网站的这个系列的文章来看: https://www.tutorialspoint.com/design_pattern/builder_pattern.h ...
- 2015 Multi-University Training Contest 1记录
1001 OO's Sequence 分析: 对于例子,能够得到,我们要求的是(1,1)(1,2)(1,3)(1,4)(1,5)(2,2)(2,3)(2,4)(2,5)(3,3)(3,4)(3,5)( ...