golang 中的并发和并行

本文详细解析了并发与并行的概念,重点介绍了Golang中goroutine的运行机制,包括goroutine的创建、调度流程以及在网络IO和阻塞系统调用情况下的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

并发与并行: 

     并发是 指同时管理很多事情,很多事物同时对同一数据进行操作。

     并行是  同时做很多事情,让不同的代码片段同时在不同的处理器上执行.

goroutine运行过程:

    1. golang运行时默认会为每个可用的物理处理器分配一个逻辑处理器,每个逻辑处理器都会绑定单个操作系统线程。

   创建一个goroutine  -------> 加入到全局运行队列

   准备运行goroutine -------->

       1.调度器为其分配逻辑处理器,将其加入该逻辑处理器对应的本地运行队列中 

       2. 等待逻辑处理器调度运行。

如果goroutine运行中执行了一个阻塞的系统调用(非网络IO) -------->

            1. 操作系统线程 O1 与 逻辑处理器分离,  逻辑处理器与正在运行的goroutine G1分离

            2. golang调度器会创建一个新的线程N1绑定到逻辑处理器上,开始执行本地其他的goroutine, O1运行中G1等待系统调用执行完.

            3. G1系统调用执行完成之后,G1放回全局运行队列中,O1线程保留,以便后续使用。

网络IO阻塞流程上有点不同:

            1.  goroutine 会与逻辑处理器分离, goroutine移到网路轮询器中运行,网络准备就绪,对应的gorouttine会重新分配到逻辑处理器中完成操作。

golang的并行是将多个goroutine 分配到多个逻辑处理上执行。

 

 

          

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值