美文网首页
进程(process),线程(thread) ,逻辑调度器(lo

进程(process),线程(thread) ,逻辑调度器(lo

作者: cdz620 | 来源:发表于2020-02-28 10:30 被阅读0次

基础: 进程与线程

  • 进程(process):操作系统资源分配的最小单元,资源管理角色:
    • Memory: 代码,数据
    • Handles: files, devices, OS
    • Threads: 主线程,和其他线程,执行代码
  • 线程(thread):是CPU执行的最小单元
  • OS scheduler:调度线程,决定哪些线程分配到CPU时间片

图示:


image.png

go

  • Go runtime scheduler: 创建和管理所有的goroutine,绑定系统线程到logical processor,调度goroutine 到logical processor执行,包含一个goroutine全局待调度队列。
  • logical processor: 每个logical processor 绑定到一个线程上,包含一个goroutine执行队列,调度执行goroutine
  • thread:一个thread用来执行多个goroutine,在不同的时间
  • goroutine:go里面的异步执行函数, 比thread占用更少资源,更容易被调度执行
  • go弱化了thread概念,让logical processor来调度thread执行。

goroutine 调度过程

  1. goroutine 创建,放置在go runtime scheduler 的全局队列,等待被调度
  2. runtime scheduler 调度goroutine 到一个logical processor ,添加到logical processor 的执行队列,等待logical processor 调度
  3. 当正在执行的goroutine 执行一些阻塞调用,该thread与goroutine从logical processor解除关联,阻塞的goroutine等待阻塞调用返回
  4. 解除thread关联时,logical processor 没有一个可以调度的thread。所以logical processor重新创建一个线程关联到logical processor,继续调度自己的执行队列
  5. 当阻塞调用返回时,goroutine 返回到logical processor 的执行队列等待被调度;空闲的thread资源保留,等待将来被使用。

图示:

image.png

Concurrency vs parallelism

Parallelism(并发):

  • Parallelism can only be achieved when multiple pieces of code are executing simultaneously against different physical processors. 并发执行,利用多核处理器的物理资源,并发执行代码
  • Parallelism is about doing a lot of things at once. 在现一时间同时做多个事情

Concurrency(并行):

  • Concurrency is about managing a lot of things at once。在同样的时间内管理执行多个事情
  • 在大多数情况下,并行的性能大于并发,因为操作系统和物理硬件的压力更小,允许系统做更多的事情

图示:

image.png

疑问?

go弱化了thread概念,让logical processor来调度thread执行。go runtime 是否在维护一个线程池,让logical processor 调度使用?

  • 目前go默认可以使用10000个线程,可以通过SetMaxThreads设置
  • 《go in action 》 第六章里有提到因为系统调用返回的goroutine,会放到logical processor的调度队列里;与之关联的线程,会放置到后续使用

基于以上两点,猜测确实有维护一个线程池。目前还没找到相关文档,关乎这方面底层的介绍

参考文档:

相关文章

  • 进程(process),线程(thread) ,逻辑调度器(lo

    基础: 进程与线程 进程(process):操作系统资源分配的最小单元,资源管理角色:Memory: 代码,数据H...

  • 浏览器的进程

    进程 (process) 和线程 (thread) 进程(process)和线程(thread)是操作系统的基本概...

  • 并发基础

    概念 进程(Process)&线程(Thread) 进程是系统资源分配的最小单元;线程是CPU调度的最小单元 一个...

  • 从0开始学线程并发(一)

    什么是多线程 进程:Process,系统级别的资源调度单位。相当于一个程序实例 线程:Thread,进程内的资源调...

  • java多线程

    新建 new() ,Thread()进程的子类,start() 就绪 等待JVM线程调度器的调度 运行 获取CPU...

  • 学习笔记_objccn_并发编程

    并发编程:API 及挑战 线程 线程(thread)是组成进程的子单元,操作系统的调度器可以对线程进行单独的调度。...

  • 多线程入门

    重点: 线程的实现 线程的同步 Process(进程)和 Thread(线程) 进程中有线程,真正执行的是线程 ...

  • 操作系统

    进程VS线程 Process/Thread 进程: 1. 进程是相对独立的 2. 包含多个线程 3. ...

  • 线程2

    线程是程序中一个单一的顺序控制流程———thread 进程:一个相对独立的、可调度的执行单元———process ...

  • 为什么校招面试中“线程与进程的区别”老是被问到?我该如何回答?

    进程与线程?(Process vs. Thread?) 面试官(正襟危坐中):给我说说“线程”与“进程”吧。 我(...

网友评论

      本文标题:进程(process),线程(thread) ,逻辑调度器(lo

      本文链接:https://www.haomeiwen.com/subject/yvrfhhtx.html