简单测试一下go(golang) 和libtask 协程的切换效率
来源:互联网 发布:golang syscall说明 编辑:程序博客网 时间:2024/05/31 00:39
简单测试一下go(golang)和libtask协程的切换效率, libtask一个C语言的协程库,是go语言的前身
很早期的原型. 测试机器是我的mac air 安装的centos虚拟机(只有一个核), 代码没有采用任何优化,
只是使用默认配置
测试结论:
golang 切换100w次 需要 295ms
libtask 切换100w次 需要1446ms
golang 测试代码:
package mainimport ( "fmt" "runtime" "time" )var i int = 0func test(){for{i++if i >1000000{fmt.Printf("end switch \n")break}else{//fmt.Printf(" in test i:%d \n", i)}runtime.Gosched()}}func main(){fmt.Printf("GOMAXPROCS :%d \n",runtime.GOMAXPROCS(1))tv1 := time.Now().UnixNano()go test()// in main goroutinetest()tv2 := time.Now().UnixNano()usetime := (tv2 - tv1)/1000000fmt.Printf("use time: %dms \n", usetime)fmt.Printf("end main \n")}
libtask 测试代码:
#include <stdio.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <stdlib.h>#include <task.h>#include<sys/time.h>extern int tasknswitch;enum { STACK = 32768 };int i = 0;struct timeval tv1, tv2;voidtestswitch(void *v){ int ms; while(1) { i++; if( i< 1000000) { //printf("int task i:%d \n", i); taskyield(); } else { // chansendul(c, 0); //taskexitall(0); gettimeofday(&tv2,NULL); ms = ((tv2.tv_sec - tv1.tv_sec)*1000000 + (tv2.tv_usec - tv1.tv_usec))/1000; printf("time use %d\n ", ms); printf("task swithch %d \n", tasknswitch); taskexitall(0); } }}voidtaskmain(int argc, char **argv){ int n;//c = chancreate(sizeof(unsigned long), 0); gettimeofday(&tv1, NULL);//for(i=1; i<; i++){taskcreate(testswitch, 0, STACK);//} testswitch(NULL);}
0 0
- 简单测试一下go(golang) 和libtask 协程的切换效率
- 基于Libtask进行协程浅析
- 测试Go语言的interface的效率
- Golang从零开始(二)构建简单的Go项目
- 简单的测试一下memchache
- Go实战--golang中defer的使用(有事没事defer一下)
- 一个java和golang(go语言)通信的例子。
- 在Android系统中测试一下cpu的效率
- 【原创】Go语言/Golang 知识简单集锦
- Go语言/Golang 知识简单集锦
- 简单测试了一下Lua的速度
- Golang和Erlang的协程调度
- webbench对php和go语言的简单性能测试(含php7)
- golang进阶(七)——go语言的几种测试方法
- 简单测试一下
- golang 基于go-sql-driver的增删改查的简单封装
- 简单聊一下Android音频通路的切换
- GO环境的安装和测试
- CSS (一)
- Ubuntu14.04 apt-fast加速apt-get
- android在framework层增加自己的service仿照GPS
- coj 1067: 1 VS 1
- 黑马程序员--java概述
- 简单测试一下go(golang) 和libtask 协程的切换效率
- 矩形合并
- 学习hadoop(3)join日志
- ubuntu安装redis
- 黑马程序员———面向对象之多态、抽象类和接口
- Java设计模式之——单例模式
- 基于OpenCV的目标物体颜色及轮廓的识别方法
- hdu 5289 Assignment(RMQ,单调队列,multiset)
- Socket开发