Golang揭秘之多线程模型

栏目: Go · 发布时间: 5年前

内容简介:Go最近两年是门特别火的语言,想必大家也知道他是谷歌一众大神开发出来的一种高并发、跨平台的静态语言,号称“二十一世纪的C语言”,确实他的语法跟C很相似,语法比较简单,有其他语言基础的童鞋上手也比较容易,下面先谈谈他的语言特性:聊完基本特性,接下来我们看看目前主流语言所采用的多线程模型。线程主要分为用户线程和内核线程,用户线程由各语言代码所支持,而内核线程是由操作系统内核所支持。多线程模型主要就是用户线程与内核线程的连接方式:Go实现了多对多模型(M : N)线程模型,Golang内部的调度器(schedul
好久没有更新博客了,离上一篇博客有小半年的时间了,今天的主题就聊聊Golang吧。

Go最近两年是门特别火的语言,想必大家也知道他是谷歌一众大神开发出来的一种高并发、跨平台的静态语言,号称“二十一世纪的C语言”,确实他的语法跟C很相似,语法比较简单,有其他语言基础的童鞋上手也比较容易,下面先谈谈他的语言特性:

  1. 静态类型和编译型:
    变量或常量申明时必须指定类型且不可改变;程序必须通过编译生成可执行的二进制文件。
  2. 跨平台:
    支持大部门主流的计算架构和操作系统,下载相应平台的语言安装包即可。
  3. 自动垃圾回收机制
    程序运行过程中创建的对象由 Go 的运行时系统全权负责回收,这是高级语言必有得特性,与 Java 类似。
  4. 并发编程:
    有自己的并发编程模型,主要由goroutine和channel组成,还有go关键字。
  5. 多编程范式:
    支持函数式编程和面向对象编程。

聊完基本特性,接下来我们看看目前主流语言所采用的多线程模型。线程主要分为用户线程和内核线程,用户线程由各语言代码所支持,而内核线程是由操作系统内核所支持。多线程模型主要就是用户线程与内核线程的连接方式:

  1. 多对一模型(M : 1):多个用户级线程映射到一个内核级线程,线程管理在用户空间完成。
    Golang揭秘之多线程模型

    thread_1.png

    优点:线程上下文切换都发生在用户空间,避免模态切换(mode switch),从而对于性能有 积极的影响。
    缺点:所有的线程基于一个内核调度实体即内核线程,多核处理器得不到更好的利用。
  2. 一对一模型(1 : 1):每个用户级线程映射到一个内核级线程。

    Golang揭秘之多线程模型

    thread_2.png

    优点:多处理器硬件下,内核空间线程模型支持了真正的并行,当一个线程被阻塞后,允许另一个线程继续执行,所以并发能力较强。

    缺点:每创建一个用户级线程都需要创建一个内核级线程与其对应,这样创建线程的开销比

    较大,会影响到应用程序的性能。

  3. 多对多模型(M : N):内核线程和用户线程的数量比为 M : N,综合了前两种的优点。

    Golang揭秘之多线程模型

    thread_3.png

    优点:这种模型实际上是多个线程被绑定到了多个内核线程上,这使得大部分的线程上下文切换都发生在用户空间,而多个内核线程又可以充分利用处理器资源。

Go实现了多对多模型(M : N)线程模型,Golang内部的调度器(scheduler)可以让多核CPU中的每个CPU执行一个goroutine(协程的一种实现),所以想理解goroutine的并发机制原理就需要了解Go的调度器的工作原理。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程人生(上卷)

编程人生(上卷)

[美] Peter Seibel / 图灵社区 / 人民邮电出版社 / 2014-12 / 39.00元

这是一本访谈笔录,记录了当今最具个人魅力的15 位软件先驱的编程生涯。包括Donald Knuth、Jamie Zawinski、Joshua Bloch、Ken Thompson等在内的业界传奇人物,为我们讲述了他们是怎么学习编程的,在编程过程中发现了什么以及他们对未来的看法,并对诸如应该如何设计软件等长久以来一直困扰很多程序员的问题谈了自己的观点。中文版分为上下卷,上卷介绍8位大师。一起来看看 《编程人生(上卷)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具