Golang揭秘之多线程模型

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

内容简介: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的调度器的工作原理。


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

查看所有标签

猜你喜欢:

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

算法时代

算法时代

Luke Dormehl / 胡小锐、钟毅 / 中信出版集团 / 2016-4-1 / CNY 59.00

世界上的一切事物都可以被简化成一个公式吗?数字可以告诉我们谁是适合我们的另一半,而且能和我们白头偕老吗?算法可以准确预测电影的票房收入,并且让电影更卖座吗?程序软件能预知谁将要实施犯罪,并且精确到案发时间吗?这些事听起来都像是科幻小说中的情节,但事实上,它们仅是日益被算法主宰的人类世界的“冰山一角”。 近年来随着大数据技术的快速发展,我们正在进入“算法经济时代”。每天,算法都会对展示在我们眼......一起来看看 《算法时代》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具