码迷,mamicode.com
首页 > 编程语言 > 详细

语言特性

时间:2019-08-04 19:21:28      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:linux   读取   管道   轻量   线程   另一个   fat   pac   特性   

 天然并发goroute

轻量级线程,比物理线程轻,可以同时开上万个。

每个goroute是独立的调度单位。一个goroute无法访问另一个goroute内存中的变量。

c++里用的是物理线程,如果同时开上万个机器就挂了。

使用go命令,就会并发调用add函数。100个add函数会同时执行。

如果没有time.Sleep(time.Second*2)这条语句,子线程还没执行完,主线程就已经退出,子线程会来不及执行。

 

package main

import (
	"fmt"
	"time"
)

func add(a,b int) {
	sum := a^b * a^b
	fmt.Println(sum)
}

func main(){
	for i := 0; i < 100; i++ {
		go add(i, i)
	}
	time.Sleep(time.Second*2)
}

  

channel

在linux中由pipe的概念。原来两个进程之间是无法数据通信的,管道可以让b进程读取a进程的数据。

channel的作用是goroute之间数据通信

// 创建一个管道,make分配一个内存空间,定义一个int类型的chan,容量是3
// 把几个int值放进管道,放2个,len就是2.如果放4个,最新的数据不会丢,但会阻塞,就会报错:
// fatal error: all goroutines are asleep - deadlock!
// 从管道取数据是先进先出,取出后,len减少。
func test_chan(){
	pipe := make(chan int, 3)
	pipe <- 1
	pipe <- 2
	pipe <- 3
	fmt.Println(len(pipe))

	t1 := <- pipe
	fmt.Println(t1)
	fmt.Println(len(pipe))
}

  

内存管理new

 

编译

go run是类似运行一个python脚本

go build是组织目录结构,生成一个可执行文件

语言特性

标签:linux   读取   管道   轻量   线程   另一个   fat   pac   特性   

原文地址:https://www.cnblogs.com/jabbok/p/11299079.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!