go语言常见问题总结
- go语言中的goroutine和其它语言中的coroutine有什么相同和不同?
- coroutine 意味着支持将控制转移到另一个协程的明确手段。也就是说,程序员在确定coroutine何时应该暂停执行并将其控制权传递给另一个coroutine时(通过调用return/exit(通常称为yield))来编写coroutine。
- goroutine 它隐含的放弃了某些不确定点的控制权,当goroutine即将在I / O完成,信道发送等某些(外部)资源上休眠时发生这种情况。这种方法与通过channel共享状态相结合程序员将程序逻辑编写为一组连续的轻量级进程,它消除了基于协程和基于事件的方法常见的意大利面条代码问题。
- goroutine和操作系统线
- 相同点,都是简化了并发的操作。
- 不同点,简单点来说:就是线程开销太大了,所以搞一个协程,可以在线程之间调度,具体的表现就是将一个函数的执行做成异步的,如果我们用线程来做的话,开销会很大,而且线程上下文的切换也很耗时间。下面翻译原文给的解释“Goroutines是将独立执行的函数 - 协程 - 复用到一组线程上。当协程阻塞时,例如通过调用阻塞系统调用,运行时自动将同一操作系统线程上的其他协同程序移动到另一个可运行的线程,这样它们就不会被阻塞。程序员看不到这一点,这就是重点。结果,我们称之为goroutines,可以非常便宜:它们在堆栈的内存之外几乎没有开销,这只是几千字节。为了使堆栈变小,Go的运行时使用可调整大小的有限堆栈。一个新铸造的goroutine给了几千字节,这几乎总是足够的。如果不是,则运行时间会自动增长(并缩小)用于存储堆栈的内存,从而允许许多goroutine生存在适量的内存中。 CPU开销平均每个函数调用大约三个廉价指令。在同一地址空间中创建数十万个goroutine是切实可行的。如果goroutines只是线程,系统资源将以更小的数量运行。”
- 这个是在go语言的runtime里面实现的,需要了解一下go的runtime。参考文章:https://tonybai.com/2017/06/23/an-intro-about-goroutine-scheduler/
- 如果在一个goroutine的函数中写一个死循环,那么go的main goroutine是可以保证正常退出,如果main goroutine没有循环,那么子goroutine也不会有循环。这个方案应该是和goroutine的调度机制有关。
- 有一篇google官方分享的博文详细介绍了go中garbage collection 的来龙去脉。链接:https://blog.golang.org/ismmkeynote
- 另外可以参考链接:http://legendtkl.com/2017/04/28/golang-gc/
- 就像c语言中自定义结构体一样,golang中同样使用。
- 在服务器端编程,如何使用socket,什么时候使用应用层消息,如:http,什么时候使用传输层协议,如tcp。
- 在net package中有提供:https://golang.org/pkg/net/
- go语言编程中的select和c语言中使用select有什么区别?
- 很类似,golang中select 可以处理多个channel, 就像c语言中使用select处理多个socket通信一样。
- go语言中有没有线程,有没有进程?如何使用?
- 没有像python中processing 和multiprocessing 之间的区别,go语言中只有一个goroutine,并且在这之上封装了一个context来实现goroutine之间的通信。
- go语言中channel,buffer怎么理解,如何控制大小?
- 有channel,就有buffer,目的是为了缓存大小,但是又不能太大,所以有这么一个参数可以让我们去控制。
- go语言内存模型
- 主要的是happern bofore,1:w happens before r, 2:Any other write to the shared variable
v
either happens before w or after r。并且提供了多个goroutine并发操作同步的手段。参考链接:https://golang.org/ref/mem
- 主要的是happern bofore,1:w happens before r, 2:Any other write to the shared variable
goroutine的默认调度器是怎么调度的?如何实现自己的一个调度器?
goroutine的生命周期是怎样的过程?
golang中垃圾回收机制是怎么样的?
goroutine中常用的数据结构?如何封装自己的数据结构?
参考链接:go语言官网常见问题列表:https://golang.org/doc/faq
go语言常见问题总结的更多相关文章
- C语言常见问题总结
1.多次运行程序 解决方法: 错误原因是,已经编译运行出一个exe,没有关闭此exe,又点击编译运行. 应该将之前运行出的exe关闭,再来运行代码 2.单精度类型和双精度类型如何区分使用... 解决方 ...
- 测开面试 | Python语言常见问题
1.面向对象的概念? 面向对象编程,简称OOP,是一种程序设计思想 主要包括:类.继承.多态(子类方法覆盖父类方法).实例.属性.方法 2.什么是进程.线程.协程? 进程:独立数据空间,进程间不共享数 ...
- C语言常见问题 如何用Visual Studio编写C语言程序测试
新建Win32控制台应用程序 勾选控制台空项目 右击源文件,添加cpp文件 输入范例代码,可以正常运行#include <stdio.h> int main(void) { i ...
- 能让你成为更优秀程序员的10个C语言资源
能让你成为更优秀程序员的10个C语言资源 本文由 伯乐在线 - archychu 翻译自 mycplus.欢迎加入 技术翻译小组.转载请参见文章末尾处的要求. 一些人觉得编程无聊,一些人觉得它很好玩. ...
- C语言相关的经典书籍(附Ebook)
个人稍微分了一下类,有的看过,有的听人“传说过”,欢迎大家补充和共同学习. 真心经典:每个行业或者领域都有一些东西是不会随时间而逐渐消逝,以下的就是. <C语言程序设计>(第2版.新版) ...
- C语言权威指南和书单 - 适用于所有级别
注:点击标题免费下载电子书 所有级别 1. The C Programming Language (2nd Edition) 2. C: A Reference Manual (5th Edition ...
- 10个足以让你成为更优秀的程序员的C语言资源
一些人觉得编程无聊,一些人觉得它很好玩.但每个程序员都必须紧跟编程语言的潮流.大多数程序员都是从C开始学习编程的,因为C是用来写操作系统.应用程序最常用的语言. · C编程笔记 这些是华盛顿实验学院C ...
- C语言细节笔记2
C语言常见问题笔记: 1. 指针的声明 char * p1, p2; p1 是一个指向char类型的指针,而p2是一个char类型变量 这是由于 * 并不是基本类型的一部分,而是包含 ...
- 【转载】【收藏】Github上免费的编程教程【作者Victor Felder】
原链接:https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books-zh. ...
随机推荐
- JavaScript 原型链学习(二)原型的动态性
由于在原型中查找值的过程是一次搜索,因此我们对原型对象所做的任何修改都能够立即从实例上反映出来,即使是先创建了实例后修改原型也照样如此.如下示例: var friend = new Person(); ...
- Kubernetes容器上下文环境
目录贴:Kubernetes学习系列 下面我们将主要介绍运行在Kubernetes集群中的容器所能够感知到的上下文环境,以及容器是如何获知这些信息的. 首先,Kubernetes提供了一个能够让容器感 ...
- U-boot2010.06移植--阶段一
2011-02-24 23:14:57 我今天的移植将分如下3步.加上写记录文档,预计时间3小时. 一,不改变源码,完成编译. 二,修改源码,搭建一个U-boot的框架,完成编译. 三,修改源码,完成 ...
- java.lang.ClassCastException: com.sun.proxy.$Proxy* cannot be cast to***
Spring AOP 有两种代理方法, 一种是常规JDK,一种是CGLIB. 当代理对象实现了至少一个接口时,默认使用JDK动态创建代理对象: 当代理对象没有实现任何接口时,就会使用CGLIB方法. ...
- c语言格式化打印
printf的格式化打印 unsigned int ------------------- %u 打印无符号数 int ----------- ...
- react 表格扩展与编辑
项目里有个需求是点击表格某行的工料机,显示对应定额下的工料机的表格数据,并能对两个表格进行增删改查,效果如下: 代码如下: // 引入 Component 组件 import React, { Com ...
- zabbix/自动发现规则
对于zabbix 我们并不陌生 他是开源的监控系统,现在的一部分企业都在用zabbix,今天给大家分享的是企业级监控zabbix的自动发现规则,有了它我们自定义健康的时候根据宏值可以让他自动发现对 ...
- 【BZOJ2301】Problem B
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- T-net 【贪心】
问题 H: T-net 时间限制: 1 Sec 内存限制: 128 MB 提交: 302 解决: 14 [提交] [状态] [命题人:admin] 题目描述 T-net which is a ne ...
- shell编程(一)之变量
变量:命名的内存空间 bash的变量种类: 根据变量的生效范围等标准 本地变量: 生效范围为当前shell进程:对当前shell之外的其他shell进程,包括当前shell的子shell进程均无效 环 ...