Golang揭秘之多线程模型

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

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


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

查看所有标签

猜你喜欢:

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

图解网站分析(修订版)

图解网站分析(修订版)

[日] 小川卓 / 沈麟芸 / 人民邮电出版社 / 2014-10 / 69.00元

本书以图配文,结合实例详细讲解了如何利用从网站上获取的各种数据了解网站的运营状况,如何从数据中攫取最有用的信息,如何优化站点,创造更大的网站价值。本书适合各类网站运营人员阅读。 第1 部分介绍了进行网站分析必备的基础知识。第2 部分详细讲解了如何明确网站现状,发现并改善网站的问题。第3 部分是关于流量获取和网站内渠道优化的问题。第4 部分介绍了一些更加先进的网站分析方法,其中详细讲解了如何分......一起来看看 《图解网站分析(修订版)》 这本书的介绍吧!

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

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试