Golang并发模型GMP--源码学习

1.进程,线程,协程,Goroutine

进程(Process)

进程是操作系统分配资源的最小单位,每个进程都有独立的地址空间、代码、数据和系统资源。进程之间相互隔离,一个进程的崩溃不会影响其他进程。进程之间的通信通常需要使用操作系统提供的特定机制,如管道、消息队列等。由于进程之间的切换涉及到上下文切换和资源切换,因此进程间的开销较大。

线程(Thread)

线程是进程的子单元,每个进程可以包含多个线程。同一进程内的多个线程共享相同的地址空间和系统资源,因此线程之间的通信相对容易。线程之间的切换开销较小,因为它们共享进程的资源。但是,由于多个线程共享相同的地址空间,线程之间的同步和互斥需要谨慎处理,以避免竞态条件和数据竞争。

协程(Coroutine)

协程是一种用户态的轻量级线程,它不由操作系统内核管理,而是由用户程序自己管理。协程可以看作是一种更高级的线程,它允许在同一线程中的不同函数之间进行切换,而无需进行线程间的上下文切换。协程的切换开销非常小,因此能够高效地进行并发编程。协程通常依赖于特定的协程库或语言提供的原生支持。

Goroutine

轻量级:协程是非常轻量级的,创建和销毁协程的开销非常小。相比于操作系统线程,Go 协程的栈空间初始大小只有几 KB,可以根据需要进行动态调整,因此可以轻松地创建大量的协程。

并发性:Go 协程允许在一个 Go 程序中同时执行多个任务,而不需要显式地管理线程。多个协程可以在同一个线程内并发执行,从而实现高效的并发编程。

通信:Go 协程之间通过通道(Channel)进行通信。通道是一种特殊的数据结构,可以用于在协程之间传递数据,实现协程之间的同步和数据共享。

关闭和终止:通过关闭通道,可以向接收方通知数据的终止,从而实现协程的安全退出。

编写方式:Go 协程的创建和调度非常简单,只需要在函数调用前加上 go 关键字即可创建一个协程。例如:go funcName()。

并行:Go 语言通过 GOMAXPROCS 参数控制同时运行的操作系统线程数,默认情况下 GOMAXPROCS 的值等于 CPU 的核心数。这样可以让多个协程在多个 	CPU 核心上并行执行,实现并行计算。

GMP模型定义

看这篇文章写的很细,配合源码看
点我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值