• go语言中的goroutine和其它语言中的coroutine有什么相同和不同?
    1. coroutine 意味着支持将控制转移到另一个协程的明确手段。也就是说,程序员在确定coroutine何时应该暂停执行并将其控制权传递给另一个coroutine时(通过调用return/exit(通常称为yield))来编写coroutine。
    2. goroutine 它隐含的放弃了某些不确定点的控制权,当goroutine即将在I / O完成,信道发送等某些(外部)资源上休眠时发生这种情况。这种方法与通过channel共享状态相结合程序员将程序逻辑编写为一组连续的轻量级进程,它消除了基于协程和基于事件的方法常见的意大利面条代码问题。
  • goroutine和操作系统线
    1. 相同点,都是简化了并发的操作。
    2. 不同点,简单点来说:就是线程开销太大了,所以搞一个协程,可以在线程之间调度,具体的表现就是将一个函数的执行做成异步的,如果我们用线程来做的话,开销会很大,而且线程上下文的切换也很耗时间。下面翻译原文给的解释“Goroutines是将独立执行的函数 - 协程 - 复用到一组线程上。当协程阻塞时,例如通过调用阻塞系统调用,运行时自动将同一操作系统线程上的其他协同程序移动到另一个可运行的线程,这样它们就不会被阻塞。程序员看不到这一点,这就是重点。结果,我们称之为goroutines,可以非常便宜:它们在堆栈的内存之外几乎没有开销,这只是几千字节。为了使堆栈变小,Go的运行时使用可调整大小的有限堆栈。一个新铸造的goroutine给了几千字节,这几乎总是足够的。如果不是,则运行时间会自动增长(并缩小)用于存储堆栈的内存,从而允许许多goroutine生存在适量的内存中。 CPU开销平均每个函数调用大约三个廉价指令。在同一地址空间中创建数十万个goroutine是切实可行的。如果goroutines只是线程,系统资源将以更小的数量运行。”
  • goroutine的默认调度器是怎么调度的?如何实现自己的一个调度器?

    • 这个是在go语言的runtime里面实现的,需要了解一下go的runtime。参考文章:https://tonybai.com/2017/06/23/an-intro-about-goroutine-scheduler/

    goroutine的生命周期是怎样的过程?

    • 如果在一个goroutine的函数中写一个死循环,那么go的main goroutine是可以保证正常退出,如果main goroutine没有循环,那么子goroutine也不会有循环。这个方案应该是和goroutine的调度机制有关。

    golang中垃圾回收机制是怎么样的?

    goroutine中常用的数据结构?如何封装自己的数据结构?

    • 就像c语言中自定义结构体一样,golang中同样使用。
  • 在服务器端编程,如何使用socket,什么时候使用应用层消息,如:http,什么时候使用传输层协议,如tcp。
  • 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

参考链接:go语言官网常见问题列表:https://golang.org/doc/faq

go语言常见问题总结的更多相关文章

  1. C语言常见问题总结

    1.多次运行程序 解决方法: 错误原因是,已经编译运行出一个exe,没有关闭此exe,又点击编译运行. 应该将之前运行出的exe关闭,再来运行代码 2.单精度类型和双精度类型如何区分使用... 解决方 ...

  2. 测开面试 | Python语言常见问题

    1.面向对象的概念? 面向对象编程,简称OOP,是一种程序设计思想 主要包括:类.继承.多态(子类方法覆盖父类方法).实例.属性.方法 2.什么是进程.线程.协程? 进程:独立数据空间,进程间不共享数 ...

  3. C语言常见问题 如何用Visual Studio编写C语言程序测试

    新建Win32控制台应用程序   勾选控制台空项目   右击源文件,添加cpp文件   输入范例代码,可以正常运行#include <stdio.h> int main(void) { i ...

  4. 能让你成为更优秀程序员的10个C语言资源

    能让你成为更优秀程序员的10个C语言资源 本文由 伯乐在线 - archychu 翻译自 mycplus.欢迎加入 技术翻译小组.转载请参见文章末尾处的要求. 一些人觉得编程无聊,一些人觉得它很好玩. ...

  5. C语言相关的经典书籍(附Ebook)

    个人稍微分了一下类,有的看过,有的听人“传说过”,欢迎大家补充和共同学习. 真心经典:每个行业或者领域都有一些东西是不会随时间而逐渐消逝,以下的就是. <C语言程序设计>(第2版.新版) ...

  6. C语言权威指南和书单 - 适用于所有级别

    注:点击标题免费下载电子书 所有级别 1. The C Programming Language (2nd Edition) 2. C: A Reference Manual (5th Edition ...

  7. 10个足以让你成为更优秀的程序员的C语言资源

    一些人觉得编程无聊,一些人觉得它很好玩.但每个程序员都必须紧跟编程语言的潮流.大多数程序员都是从C开始学习编程的,因为C是用来写操作系统.应用程序最常用的语言. · C编程笔记 这些是华盛顿实验学院C ...

  8. C语言细节笔记2

    C语言常见问题笔记:    1. 指针的声明     char * p1, p2;  p1 是一个指向char类型的指针,而p2是一个char类型变量  这是由于 * 并不是基本类型的一部分,而是包含 ...

  9. 【转载】【收藏】Github上免费的编程教程【作者Victor Felder】

    原链接:https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books-zh. ...

随机推荐

  1. extends 与implements的区别和用法

    1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口. extends 是继承某个类, 继承之后可以使用父类的方法, 也可以 ...

  2. How Many Triangles (极角排序 + 尺取法)

    题意:二维平面与有很多个点,然后求构成锐角三角形的个数. 思路:对于每一个三角形我们知道存在至少2个锐角,只要有一个钝角就不行了,所以我们的想法就是枚举所有夹角的状态,然后得知情况,确定用总个数减去- ...

  3. app埋点

    目前APP埋点的主流有两种方式: 第一类是预先设定好想要获取的目标数据,让程序员撰写代码把“采集器”埋到相应的页面上,用于追踪和记录的用户的行为,并把实时数据传送到后台数据库或者客户端. 第二类方法是 ...

  4. 将Bdd100k数据集转为CoCo数据集

    小可爱,加油噻~ 添加上级目录 import sys sys.append('../..') 这样 from ... import 就会把加入的路径要扫描哒 os.walk() 方法用于通过在目录树中 ...

  5. 超详MySQL5.7.17压缩包安装图文教程

    靠吹风机暖手写完这篇教程...网络上关于MySQL 5.7.17的安装教程很少且不详细,所以总结了这样一篇文章,希望能帮到大家:(相较于Oracle的安装,MySQL还是简单得多) 1. 下载网址:h ...

  6. urllib3

    urllib3是一个功能强大.条理清晰.用于http客户端的python库,相对于urllib它所有的特点如下: 线程安全 连接池 客户端SSL/TLS验证 使用多部分编码上传文件 Helpers用于 ...

  7. css的再深入9(更新中···)

    一 单位 1.px 就是一个基本的单位 像素 2.em 也是一个单位 用父级元素的字体大小乘以em前面的数字.如果父级没有就继承上一个父级直到body,如果body没有那就默认是16px. 3.rem ...

  8. Signal in unit is connected to following multiple drivers VHDL

    参考链接 https://blog.csdn.net/jbb0523/article/details/6946899 出错原因 两个Process都对LDS_temp进行了赋值,万一在某个时刻,在两个 ...

  9. CSS3 傻傻分不清楚的transition, transform 和 animation

    transition transition允许css的属性值在一定的时间区间内平滑地过渡,语法如下: transition : transition-property transition-durat ...

  10. spring-cloud-config-server——Environment Repository(Git Backend)

    参考资料: https://cloud.spring.io/spring-cloud-static/spring-cloud-config/1.4.0.RELEASE/single/spring-cl ...