golang 1.5.1 协程学习测试

golang的协程和多cpu部分再做个学习测试。算法还是使用http://www.simonzhang.net/?p=2789。
做了三个测试。

一、修改了之前单次循环部分。计算中,使用了break(就是delphi和C里的goto)。统一最后返回值,这样只有一个return。

/*
# Date:        2015-11-19
# Author:      simonzhang
# Web:         www.simonzhang.net
# Email:       simon-zzm@163.com
# -------------------------------
*/

package main

import (
        "strconv"
)

var all int = 1E7 //1E7 = 10^7 = python 10**7

func check(num int) bool{
    status := true
    str:=strconv.Itoa(num)
    var str_len int = len(str)
    var a int=str_len-1
    LOOP:
    for b:=0; b

二、单cpu循环8次,因为测试服务器cpu有8核,这样方便测试多cpu下的效果。

/*
# Date:        2015-11-19
# Author:      simonzhang
# Web:         www.simonzhang.net
# Email:       simon-zzm@163.com
# -------------------------------
*/

package main

import (
        "strconv"
        "runtime"
)

var all int = 1E7 //1E7 = 10^7 = python 10**7

func check(num int) bool{
    status := true
    str:=strconv.Itoa(num)
    var str_len int = len(str)
    var a int=str_len-1
    LOOP:
    for b:=0; b

三、多cpu,每个cpu跑一次。使用协程处理。

/*
# Date:        2015-11-19
# Author:      simonzhang
# Web:         www.simonzhang.net
# Email:       simon-zzm@163.com
# -------------------------------
*/

package main

import (
        "strconv"
        "runtime"
)

var all int = 1E7 //1E7 = 10^7 = python 10**7

func check(num int) bool{
    status := true
    str:=strconv.Itoa(num)
    var str_len int = len(str)
    var a int=str_len-1
    LOOP:
    for b:=0; b=loopnum{
            break
        }
  } 
}

运行结果:
一、
real 0m0.552s
user 0m0.656s
sys 0m0.028s
二、
real 0m4.277s
user 0m5.260s
sys 0m0.096s
三、
real 0m1.434s
user 0m10.605s
sys 0m0.040s

使用协程,多cpu并行处理效果不错。写法简单。第三个测试,因为是多核运行,所以把每核的使用加再一起计算。
10.605秒除8,单个执行速度约为1.324秒,协调所消耗的资源也不小。个人理解,如果运算量比较大还是多进程为好,
前端使用负载进行协调处理。

golangstudy20151127

发表评论

电子邮件地址不会被公开。 必填项已用*标注