在分析了各大开源协程库实现后,最终选择参考boost.context的汇编实现,来写tbox的切换内核。
在这过程中,我对boost各个架构平台下的context切换,都进行了分析和测试。
在macosx i386和mips平台上实现协程切换时,发现boost那套汇编实现是有问题的,如果放到tbox切换demo上运行,会直接挂掉。
在分析这两个架构上,boost.context切换实现问题,这边先贴下tbox上的context切换demo,方便之后的讲解:
继续阅读 »
greenlet是Python众多协程实现技术中的一种,eventlet是基于greenlet实现的。而eventlet和libev又是gevent的核心。greenlet的上下文切换清晰易懂,可以结合IO事件循环构建出一些高效的事件处理逻辑。不同于yield类型的上下文切换,greenlet的上下文切换从表现形式上看更纯粹,可以直接switch到另一个greenlet,不用管目标greenlet是否已经在运行,不同greenlet之间处于完全对等的状态,可以相互switch。基于yield实现的协程往往只能切换回自己的直接或间接调用者,要想在嵌套的调用中切换出去是比较麻烦的。本质上是因为yield只能保留栈顶的帧,Python3对
继续阅读 »
tbox的协程实现,是stackfull模式的,需要指定独立堆栈和协程函数,目前暂时还不能像golang那样实现堆栈的动态增长,之后会对其进行支持。
目前提供下面一些功能特性:
1. 提供yield切换调度支持,这个是必须的哈
2. 提供suspend(挂起)/resume(恢复)协程接口,不同于yield的是,被suspend后,如果不显示调用resume恢复它,是永远不会被调度到的
3. 提供sleep等待接口支持
4. 提供io调度支持,支持socket等io等待(内部使用epoll, poll, kqueue, select, poll等接口调度)
5. 原生支持stream,socket,http等模块的协程支持,可
继续阅读 »
tbox的默认内存分配,是完全基于自己的内存池架构,支持内存的快速分配,和对碎片的优化,并且支持各种内存泄露、溢出检测。
如果不想用tbox内置的默认内存分配管理,也可以灵活切换到其他分配模式,因为tbox现在已经完全支持allocator架构,
只要在init阶段传入不同的分配器模型,就能快速切换分配模式,例如:
```c
/* 采用默认的tbox内存管理,启用内存池维护、碎片优化、内存泄露溢出检测等所有特性
* 相当于使用了:tb_default_allocator(tb_null, 0)
*/
tb_init(tb_null, tb_null);
/* 采用默认的tbox内存管理,启用
继续阅读 »
协程现在已经不是个新东西了,很多语言都提供了原生支持,也有很多开源的库也提供了协程支持。
最近为了要给tbox增加协程,特地研究了下各大开源协程库的实现,例如:libtask, libmill, boost, libco, libgo等等。
他们都属于stackfull协程,每个协程有完整的私有堆栈,里面的核心就是上下文切换(context),而stackless的协程,比较出名的有protothreads,这个比较另类,有兴趣的同学可以去看下源码,这里就不多说了。
那么现有协程库,是怎么去实现context切换的呢,目前主要有以下几种方式:
使用ucontext系列接口,例如:libtask
使用setjmp/longjm
继续阅读 »
nrm可以快速地切换不同的npm registries,包括:npm,cnpm,taobao,nj(nodejitsu),rednpm
安装
$ npm install -g nrm
more
继续阅读 »
本站点之前的评论插件一直用的都是多说,作为一款免费的第三方社会化评论插件,总体来说,多说做的还算可以,唯独其号称智能的防垃圾评论系统,就像空气人一样,完全无用,导致多说垃圾评论泛滥,令人作呕。恰逢最近多说宣称要进行业务转型,自然评论系统也要关闭,国内的目前比较好的评论系统只有畅言不错,但是畅言需要备案,而我不愿意备案,无奈只能选Disqus了,所以将本站点的多说评论转成Disqus了。
因为Disqus在国内被墙,所以使用Disqus需要自带翻墙功能或者说需要自带科学上网功能,否则无法加载评论框,自然也就无法评论了,这是我天朝一特色,除了这非常蛋疼的一点,Disqus做得非常好。切换评论系统,首要任务是将评论数据转移到新的系统中,
继续阅读 »
在项目中使用的还是java1.7比较多,1.8平时业余项目用用,学习下,毕竟新版本始终会代替旧版本的.在mac上推荐使用jenv工具来管理多java版本,
能够随意切换.
官方网站http://www.jenv.be/{:target="_blank"},还有个是http://jenv.io/{:target="_blank"}
国人开发的算是升级版本把,能够通过该工具安装java,ant,maven,tomact.对于我来说,使用jenv足够了.
继续阅读 »
序言
难得一个周末,经过五天的工作之后,本来是打算周六周日在睡觉中度过,因为最近工作确实挺累,倒不是工作有多繁忙,而是路途遥远,每天上下班路上花费三个小时,特别是早高峰挤地铁,那真是个体力活啊,每天都是七号线静安寺转二号线,换乘之前,并不能太深入地铁车厢内部,否则到了换乘站你可能根本就挤不下车去了。
最近博客流量有渐增趋势,可能是之前未被百度收录,而近期被百度收录的缘故吧,可见我天朝还是百度的天下,哎,万恶的墙啊(Great Firewall of China)!流量渐增,访客自然增加,所以也会有猎头加我微信,我也在考虑要不要把我的个人信息撤掉,貌似泄露的有点多了。同时也会有一些人因为博客的内容加我,请教谈不上,可能是一些同学在
继续阅读 »
首先你需要知道自己的Linux版本信息,下面介绍一些常用的查看Linux系统版本的命令
1. 查看内核版本命令,以下三个命令任选
```bash
[hadoop@localhost ~]$ cat /proc/version
Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Fri Mar 6 11:36:42 UTC 2015
[hadoop@localhost ~]$ uname -a
Linux localhost
继续阅读 »