使用了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. Mysql 按条件排序查询一条记录 top 1 对应Mysql的LIMIT 关键字

    项目中需要每次查询一个表中的最新的一条记录,表结构里面有日期字段.只需要显示一条记录. Mysql帮助文档里面的解释 3.6.2. 拥有某个列的最大值的行 任务:找出最贵物品的编号.销售商和价格. 这 ...

  2. [转载]iOS6新特征:UICollectionView官方使用示例代码研究

    原文地址:iOS6新特征:UICollectionView官方使用示例代码研究作者:浪友dans 注:这里是iOS6新特征汇总贴链接 iOS6新特征:参考资料和示例汇总 这个链接可以学习到UIColl ...

  3. Linux查找并删除重复文件的命令行fdupes工具,dupeGuru图形工具

    查了几十个网页,找到这个接近满意的解决方案http://unix.stackexchange.com/questions/146197/fdupes-delete-files-aft... 不过正则里 ...

  4. GDUT决赛题解

    决赛,我自我认为题目难度更大,反而我的心态更好了. 由于放轻松的时候反而效果更好,跟昨天的观点一样,凡是可以1A的,才算这题做得好. A.数目不大,关键是看懂题(我自己连输入输出是什么都不清楚.... ...

  5. http://blog.csdn.net/rosten/article/details/17068285

    http://blog.csdn.net/rosten/article/details/17068285

  6. Guice 学习(五)多接口的实现( Many Interface Implementation)

    1.接口 /* * Creation : 2015年6月30日 */ package com.guice.InterfaceManyImpl; public interface Service { p ...

  7. bootstrap popover 如何在hover状态移动到弹出上不消失

    bootstrap中的popover其实就是对tooltip做了一定升级,拥有了标题和内容 概要 使用的时候依赖第三方插件 依赖tooltip插件 必须初始化 title 和 content 可以在p ...

  8. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-Switch Case语句是否会自动跳转到下一个

    在C#中,每一个case后面必须有break,所以输出1,也就是如果a=0,则只会执行case=0的那一段,当等于1之后不会继续.   在TwinCAT中,虽然CASE语句没有break,但是实际上不 ...

  9. app接口开发(php)

    1.JSON方式封装通信接口: 封装: response.php <?php // JSON方式封装通信接口 // 定义 response类 class Response { // 定义一个静态 ...

  10. Vue工程模板文件 webpack打包

    1.github github地址:https://github.com/MengFangui/VueProjectTemplate 2.webpack配置 (1)基础配置webpack.base.c ...