- 博客(5)
- 资源 (46)
- 收藏
- 关注
原创 深入理解Golang Channel
Golang使用Groutine和channels实现了CSP(Communicating Sequential Processes)模型,channles在goroutine的通信和同步中承担着重要的角色。在GopherCon 2017中,Golang专家Kavya深入介绍了 Go Channels 的内部机制,以及运行时调度器和内存管理系统是如何支持Channel的,本文根据Kavya的ppt学习和分析一下go channels的原理,希望能够对以后正确高效使用golang的并发带来一些启发。以..
2021-10-25 20:20:34 211
原创 Golang 协程调度
一、线程模型N:1模型,N个用户空间线程在1个内核空间线程上运行。优势是上下文切换非常快但是无法利用多核系统的优点。 1:1模型,1个内核空间线程运行一个用户空间线程。这种充分利用了多核系统的优势但是上下文切换非常慢,因为每一次调度都会在用户态和内核态之间切换。(POSIX线程模型(pthread),Java) M:N模型, 每个用户线程对应多个内核空间线程,同时也可以一个内核空间线程对应多个用户空间线程。Go打算采用这种模型,使用任意个内核模型管理任意个goroutine。这样结合了以上两种模型的
2021-10-25 19:09:41 478
原创 Golang调度机制
首先golang中协程golang是用户线程与系统线程的对应关系是多对多,既能利用多核cpu资源,也能尽可能减少上下文切换成本,代价是go需要实现复杂的goroutine调度机制。N:1,所有用户线程对应1个系统线程,无法利用多核cpu;1:1,1个用户线程对应一个系统线程,上下文切换成本高。调度逻辑四个结构体M:Machine,操作系统线程。一个M被创建后会在P空闲队列中获取P进行绑定,未绑定则进入阻塞状态。P:Process,调度器的核心处理器。通常表示执行上下文,P用于绑定
2021-10-25 19:08:57 347
原创 图示Golang垃圾回收机制
垃圾回收概念程序创建对象等引用类型实体时会在虚拟内存中分配给它们一块内存空间,如果该内存空间不再被任何引用变量引用时就成为需要被回收的垃圾。操作系统会记录一个进程运行时的所占用的内存、CPU和寄存器等资源,当进程结束后便由操作系统能够自动回收资源。但是对于一个运行较长时间的程序,如果使用完内存资源后没有及时释放就会造成内存泄漏甚至系统错误。以不支持自动垃圾回收的C++为例:void foo(){ char *p = new char[128]; // 对指针的使用 delet..
2021-10-22 01:38:29 479
原创 图解Go语言内存分配
Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理。这样可以自主地实现更好的内存使用模式,比如内存池、预分配等等。这样,不会每次内存分配都需要进行系统调用。Golang运行时的内存分配算法主要源自 Google 为 C 语言开发的TCMalloc算法,全称Thread-Caching Malloc。核心思想就是把内存分为多级管理,从而降低锁的粒度。它将可用的堆内存采用二级分配的方式进行管理:每个线程都会自行维护一个独立的内存池,进行内存分配时优先从该内存池中分配,当内存..
2021-10-09 00:44:31 282
W3School离线手册(2014.3.24)
2014-04-03
DELPHI XE5 UP2 破解
2014-04-03
Google官方下拉刷新组件SwipeRefreshLayout
2014-04-03
软件管理沉思录:SEI的项目管理、人际沟通和团队协作要诀,完整扫描版
2014-04-03
控制台小游戏之《推箱子》及关卡地图编辑器
2014-04-03
《TCP IP详解》全三卷 中文有书签 不分割
2014-07-07
提高C++性能的编程技术.pdf
2014-04-09
改变未来的九大算法,完整扫描版
2014-04-08
JavaScript、Css2.0、Css3.0、Jquery、html5等各种中文手册打包放送
2014-04-04
项目管理七杯茶,完整扫描版
2014-04-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人