语言特性
Posted jabbok
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语言特性相关的知识,希望对你有一定的参考价值。
天然并发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是组织目录结构,生成一个可执行文件
以上是关于语言特性的主要内容,如果未能解决你的问题,请参考以下文章