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的调度器的工作原理。


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

查看所有标签

猜你喜欢:

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

大规模Web服务开发技术

大规模Web服务开发技术

伊藤直也、田中慎司 / 李剑 / 电子工业出版社 / 2011-7 / 59.00元

Hatena是日本最大的Web服务提供商之一,它提供的服务包括关键字(类似于维基百科)、博客、相册等。《大规模Web服务开发技术》由伊藤直也、田中慎司所著,内容主要来自Hatena为学生们举行的暑期实习的课程,内容涵盖广泛,介绍了性能优化、分布式、算法、系统架构等各个方面,甚至还介绍了硬件的经济成本,是运维工程师们必不可少的参考书。书中还包括几个算法实习课题,介绍了压缩算法、全文搜索等算法的实现方......一起来看看 《大规模Web服务开发技术》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

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

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码