使用了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开启多进程——拆分多个进程同时处理(分而治之)的更多相关文章

  1. 第十五章、python中的进程操作-开启多进程

    目录 第十五章.python中的进程操作-开启多进程 一.multprocess模块 二.multprocess.process模块 三.Process()对象方法介绍 四.Process()对象属性 ...

  2. Python程序中的进程操作--—--开启多进程

    Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...

  3. 2013/11/21工作随笔-PHP开启多进程

    今天被问到一个问题,php如何开启多进程才比较稳定. php开启多进程执行一个操作有哪些方法: 首先想到的是使用pcntl的fork 具体可以参考之前的文章:PHP的pcntl多进程 其次想到的方法是 ...

  4. 第二章IPC——IPC与开启多进程

    问题 一.IPC ①.什么是IPC  ②.为什么要有IPC 二.多进程 ①.如何开启多进程  ②.系统如何创建多进程 三.多进程引发的问题 问:私有进程(利用":+进程名")能否共 ...

  5. Android IPC机制(一)开启多进程

    1. 为何要开启多进程 为何开启android应用要开启多进程,主要有以下几点: 单进程所分配的内存不够,需要更多的内存.在早期android系统只为一个单进程的应用分配了16M的可用内存,随着手机的 ...

  6. Flask 开启多进程或多线程

    2018-07-15 23:31:20 yang9315 阅读数 7703更多 分类专栏: python   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接 ...

  7. day34 并行并发、进程开启、僵尸及孤儿进程

    day34 并行并发.进程开启.僵尸及孤儿进程 1.并行与并发 什么是并行? 并行指的是多个进程同时被执行,是真正意义上的同时 什么是并发? 并发指的是多个程序看上去被同时执行,这是因为cpu在多个程 ...

  8. Python多进程库multiprocessing中进程池Pool类的使用[转]

    from:http://blog.csdn.net/jinping_shi/article/details/52433867 Python多进程库multiprocessing中进程池Pool类的使用 ...

  9. php-fpm 如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。

    php-fpm未优化网友反映的问题 1.最近将Wordpress迁移至阿里云.由于自己的服务器是云服务器,硬盘和内存都比较小,所以内存经常不够使,通过ps ax命令查看后,发现启动php-fpm进程数 ...

随机推荐

  1. Metesploit使用随笔

    平时在工作中真正用到metesploit机会不多,偶尔也会用来做漏洞验证,但是每次使用的时候都需要花点时间回忆一下具体是怎么用的,因此索性记下来方便自己,以使用Nessus扫描YS的某个硬件设备发现的 ...

  2. 使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

    原文:http://www.cnblogs.com/ityouknow/p/8403388.html 随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成, ...

  3. [功能]点击ImageView进入页面,时间响应者链实现

    app点击一个按钮跳转到另外一个控制器非常常用,但是如果是点击的是UIImageView如何通过模态视图进入另外一个控制器呢?万一这个UIImageView在自定义的cell或者view里面,那该如何 ...

  4. react使用echarts

    1.安装echarts: npm install echarts --save 2.制作线性图组件,只引入echart必要的js内容 /** * Created by yongyuehuang on ...

  5. 小伙子又乱码了吧-Java字符编码原理总结

    前提 配合前面阅读的I/O和NIO的资料,现在总结一下关于字符集和乱码问题的原理和解决方案.参考资料: 码表ASCII Unicode GBK UTF-8 字符编码笔记ASCII,Unicode和UT ...

  6. java注解说明

    * 元注解@Target,@Retention,@Documented,@Inherited * * @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括: * Elem ...

  7. 【BIEE】14_开发流程介绍

    以上是BIEE开发的流程图,通过流程图我们可以看出在BIEE中存在以下主要内容: 仪表盘 仪表盘页 分析 仪表盘提示 主题区域 Catalog RPD 以下是一些文件以及资料库存储路径 资料库存储路径 ...

  8. java之static关键字

    介绍: 1.在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份. 2.用static声明的方法为静态方 ...

  9. C#实现的根据日期得到今天是星期几

    算法如下:   基姆拉尔森计算公式: W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7  在公式中d表示日期中的日数,m表示月份数,y表示年数.注意:在公式中有 ...

  10. Intellij Idea 使用入门教程

    1.安装Idea Download: http://www.jetbrains.com/idea/download/#section=windows  (请下载UItimate) Lisense:  ...