• 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. JavaScript--浅谈!=、!==、==和===的区别

    == 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 === 和 !== 只有在相同类型下,才会比较其值 <!DOCTYPE html> <html> ...

  2. SD卡与FAT32系统学习

    2011-06-06 23:04 前2天,我了解了一下SD卡驱动的原理及FAT32文件系统的结构.接着准备主要已移植为主.通过LCD显示SD卡中的图片.但我需要分步进行. 0,使sd卡能读写数据.1, ...

  3. 如何在eclipse添加SVN菜单

    首先需要在eclipse中安装svn插件,这个网上教程很多 那么我来说下如何在将svn添加到菜单中去吧. 很简单,

  4. SSM项目思路整合NEW

    #首先进行项目思路整体分析,具体包括哪些模块,如何实现等: 一)搭建环境 1.导包: (Spring核心包4个 + 面向切面的包4个 + SpringJDBC和事务的包各一个, SpringMVC两个 ...

  5. linux命令之pssh命令

    查看一下pssh命令的帮助文档: [root@test2 ~]# pssh --version [root@test2 ~]# pssh --help Usage: pssh [OPTIONS] co ...

  6. linux svn客户端安装

    yum install -y subversion svn checkout使用示例: 先创建一个目录,例如:mkdir test 检出到test目录下 svn checkout svn://192. ...

  7. Codeforces 17E Palisection - Manacher

    题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个串$s$询问,有多少对回文子串有交. 好像很简单的样子. 考虑能不能直接求,感觉有点麻烦.因为要考虑右端点在当前回文子串内还有区间包含 ...

  8. Guitar Pro里自动化编辑器有什么用?如何使用?

    我们在使用操作Guitar Pro来进行吉他学习创作时,会遇到下面几个问题.当我们想要改变全部小节或者某一特定小节的拍速时,就会在想,有没有什么简便工具来实现我们的想法呢?告诉大家,Guitar Pr ...

  9. Java 基础 类加载器和双亲委派机制 学习笔记

    转自博客:https://blog.csdn.net/weixin_38118016/article/details/79579657 文章不是我写的,但是感觉写的挺通俗易懂的,然后防止以后丢失,就转 ...

  10. docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面

    1.从容器里面拷文件到宿主机? 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径 示例: 假设容器名为testtomcat, ...