
协程
编程小问号
这个作者很懒,什么都没留下…
展开
-
进程、线程和协程的理解
进程、线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下。进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。进程和其他两个的区别还是很明显的。协程和线程的区别是:协程避免了无意义的调度,由转载 2014-07-17 21:00:13 · 479 阅读 · 0 评论 -
Let’s Hook a Library Function
If you are a developer, and want to change the way a library function works, this article will give you a basic idea of how to get started — just enough knowledge to be able to experiment with your li转载 2015-11-24 15:52:21 · 511 阅读 · 0 评论 -
协程 及 libco 介绍
libco 是腾讯开源的一个协程库,主要应用于微信后台RPC框架,下面我们从为什么使用协程、如何实现协程、libco使用等方面了解协程和libco。 why协程为什么使用协程,我们先从server框架的实现说起,对于client-server的架构,server最简单的实现:while(1) {accept();recv();do();send();}串行地转载 2015-11-24 15:41:37 · 438 阅读 · 0 评论 -
协程框架的堆栈大小陷阱
昨晚和同事联调我们的开放平台,由于基于协程框架的网关服务器总是在接受两个消息后发生段错误,Core Dump掉,让我们百思不得其解。 查看Dump文件,没有任何有效的调试信息。gdb设置断点调试,程序总是在接受到第二条消息之前,没到断点就崩溃。而日志信息却可以打到在断点之后。搞了一个多小时,真的让我们很崩溃。 最后,到晚上一点多后,我们决定改大一下协程的栈空间大小试转载 2015-11-20 18:27:34 · 1089 阅读 · 0 评论 -
[转]构建C协程之setjmp/long_jmp篇
原理简介在标准C中的头文件中定义了一组函数 setjmp / long_jmp 用来实现“非本地跳转”的功能,利用 setjmp 可以保存当前执行线索状态,稍后通过 long_jmp 函数可以实现状态的恢复,并且可以跨多层函数调用栈进行跳转。具体接口定义如下:int setjmp(jmp_buf env) 该函数主要用来保存当前执行状态,作为后续跳转的目标。调用时,转载 2015-08-05 15:15:26 · 956 阅读 · 0 评论 -
ucontext-人人都可以实现的简单协程库
1.干货写在前面协程是一种用户态的轻量级线程。本篇主要研究协程的C/C++的实现。首先我们可以看看有哪些语言已经具备协程语义:比较重量级的有C#、erlang、golang*轻量级有python、lua、javascript、ruby还有函数式的scala、scheme等。c/c++不直接支持协程语义,但有不少开源的协程库,如:Protothreads:一个“蝇量级转载 2015-08-05 13:26:35 · 524 阅读 · 0 评论 -
协程的C实现
今天正好跟ownwaterloo聊到协程,于是查了查资料,顺便写个博客记录一下吧。我主要参考的是这篇资料http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html,是Simon Tatham提出的一个协程的C实现,非常有意思。协程的思想主要是为了解决多个任务如何分享CPU这个问题的。线程在很多协作问题上处理的不好,而且需要转载 2015-08-05 13:15:48 · 1165 阅读 · 0 评论 -
[转]协程 及 Libco 介绍
2015-7-21阅读32 评论0libco 是腾讯开源的一个协程库,主要应用于微信后台RPC框架,下面我们从为什么使用协程、如何实现协程、libco使用等方面了解协程和libco。 why协程为什么使用协程,我们先从server框架的实现说起,对于client-server的架构,server最简单的实现:while(1) {accept();recv转载 2015-08-05 15:07:22 · 850 阅读 · 0 评论 -
[转]协程实现的基础
2014-12-7阅读337 评论0协程可以认为是一种用户态的线程,与系统提供的线程不同点是,它需要主动让出CPU时间,而不是由系统进行调度,即控制权在程序员手上。既然看成是用户态线程,那必然要求程序员自己进行各个协程的调度,这样就必须提供一种机制供编写协程的人将当前协程挂起,即保存协程运行场景的一些数据,调度器在其他协程挂起时再将此协程运行场景的数据恢复,以便继续运行转载 2015-08-05 15:04:05 · 457 阅读 · 0 评论 -
[转]构建C协程之ucontext篇
原理简介所谓 “ucontext” 机制是 GNU C 库提供的一组用于创建、保存、切换用户态执行“上下文”(context)的API,可以看作是 “setjmp/long_jmp” 的“升级版”,主要包括以下四个函数:void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...);int swap转载 2015-08-05 15:02:33 · 693 阅读 · 0 评论 -
深入理解yield(二):yield与协程
作者:BeginMan本文地址:http://beginman.github.io转载请注明出处协程概念1.并发编程的种类:多进程,多线程,异步,协程2.进程,线程,协程的概念区别:进程、线程和协程的理解进程:拥有自己独立的堆和栈,既不共享堆也不共享栈,进程由操作系统调度。线程:线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准转载 2015-08-05 12:02:07 · 1267 阅读 · 0 评论 -
ucontext簇函数学习
ucontext簇函数学习作者: fergus (zfengzhen@gmail.com)系统手册学习:名字getcontext, setcontext —— 获取或者设置用户上下文概要#include ucontext.h>int getcontext(ucontext_t *ucp);int setcontext(const ucontex转载 2015-08-05 11:52:15 · 1518 阅读 · 0 评论 -
协程初识
协程,又称微线程和纤程等,据说源于 Simula 和 Modula-2 语言(我没有深究,有错请指正),现代编程语言基本上都有支持,比如 Lua、ruby 和最新的 Google Go,当然也还有最近很让我惊艳的 falcon。协程是用户空间线程,操作系统对其存在一无所知,所以需要用户自己去做调度,用来执行协作式多任务非常合适。其实用协程来做的东西,用线程或进程通常也是一样可以做的,但往往多了许多转载 2015-02-11 23:40:36 · 443 阅读 · 0 评论 -
协程 及 libco 介绍
libco 是腾讯开源的一个协程库,主要应用于微信后台RPC框架,下面我们从为什么使用协程、如何实现协程、libco使用等方面了解协程和libco。 why协程为什么使用协程,我们先从server框架的实现说起,对于client-server的架构,server最简单的实现:while(1) {accept();recv();do();send();}串行地转载 2015-02-11 23:54:21 · 562 阅读 · 0 评论 -
如何实现支持数亿用户的长连消息系统 | Golang高并发案例
360消息系统介绍360消息系统更确切的说是长连接push系统,目前服务于360内部多个产品,开发平台数千款app,也支持部分聊天业务场景,单通道多app复用,支持上行数据,提供接入方不同粒度的上行数据和用户状态回调服务。目前整个系统按不同业务分成9个功能完整的集群,部署在多个idc上(每个集群覆盖不同的idc),实时在线数亿量级。通常情况下,pc,手机转载 2015-11-26 16:14:13 · 2184 阅读 · 0 评论