Golang GMP模型和pthread库的异同

首先需要明确的是这两者根本不是一个维度的东西。
Golang的GMP是Golang从语言层级支持的协程实现模型,而pthread则是遵从POSIX接口规范的线程库。
这里只是由于参加比赛的缘故,所以将这两者联系到了一起。

相同点

1.都需要在切换时保存相应的上下文,都有运行时栈的概念。

不同点

1.Golang在语言层级实现了协程,对用户隐藏的细节会更多一些,对用户来说更加易用一些,直接go一个函数,底层就会帮你实现复杂的调度逻辑,尽可能榨干CPU计算性能,而pthread的话,需要用户的多线程编程经验要多些,也更容易出现一些同步方面的问题。
2.goroutine stack初始大小为2KB,且可以动态调整(在函数调用时可能触发扩容,在GC时可能触发缩容),而thread默认栈大小为8MB,且只支持全局修改缺省大小(ulimit -s)或用系统调用指定(setrlimit)。
3.pthread的操作对象只有内核级线程,针对线程的相关操作(创建/销毁/让出等)都是在内核态发生的,而goroutine的行为都是发生在用户态的(其实这么说也不完全对,因为真正负责工作的底层M还是内核线程)。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值