GoLang
zxx901221
这个作者很懒,什么都没留下…
展开
-
golang的goroutine调度机制
一直对goroutine的调度机制很好奇,最近在看雨痕的golang源码分析,(基于go1.4)感觉豁然开朗,受益匪浅;去繁就简,再加上自己的一些理解,整理了一下~~调度器主要基于三个基本对象上,G,M,P(定义在源码的src/runtime/runtime.h文件中)1. G代表一个goroutine对象,每次go调用的时候,都会创建一个G对象2. M...转载 2018-10-10 21:11:32 · 278 阅读 · 0 评论 -
golang的垃圾回收(GC)机制
然后再到这里 golang的垃圾回收采用的是 标记-清理(Mark-and-Sweep) 算法就是先标记出需要回收的内存对象快,然后在清理掉;在这里不介绍标记和清理的具体策略(可以参考https://lengzzz.com/note/gc-in-golang),只介绍 GC过程是怎么调度的以及stw相关这个算法,会导致 stw (stop the world)的问题,中断用户逻...转载 2018-10-10 21:28:32 · 1761 阅读 · 1 评论 -
c语言实现的协程
这几天突然对协程感兴趣,于是自己实现了一个,代码放在github上:https://github.com/adinosaur/Coro协程是一种用户空间的非抢占式线程,主要用来解决等待大量的IO操作的问题。 协程vs线程对比使用多线程来解决IO阻塞任务,使用协程的好处是不用加锁,访问共享的数据不用进行同步操作。这里需要说明的一点是,使用协程之所以不需要加锁不是因为所有的协程只在一个...转载 2018-10-10 21:32:37 · 230 阅读 · 0 评论 -
协程Coroutine
协程是一种用户态的轻量级线程。server的发展如下:IO密集型应用: 多进程->多线程->事件驱动->协程CPU密集型应用:多进程-->多线程如果说多进程对于多CPU,多线程对应多核CPU,那么事件驱动和协程则是在充分挖掘不断提高性能的单核CPU的潜力。异步事件驱动模型中,把会导致阻塞的操作转化为一个异步操作,主线程负责发起这个异步操作,并处理这个异步操作...转载 2018-10-10 21:41:00 · 281 阅读 · 0 评论