基于setjmp的协程厍实现

开学有一周了,博客还是要写的,今后可以写点从paper中汲取到的技术,不过请放心,不会是纯理论的,毕竟这不是我的风格。

继上回《谈一谈setjmp和longjmp》之后,我创建了一个新的分类——编程技法,总觉得把好好的一篇文章放到Linux分类下,并不能很好地凸显其价值。

今天就把关于协程的内容补完,还是主要以思想为主,细枝末节部分,请各位根据需求自行处理。

阅读剩余部分

谈一谈setjmp和longjmp

八月即将过去,又快开学了,小小感慨下。

本月,最值得欣慰的就是XETN服务器能够用ab测试了,单进程下RPS差不多是nodejs的4倍,当然离预期依旧很遥远,也就只能欺负欺负node了。

开发的时候异步IO带来的EAGAIN甚是讨厌,而攻克这个难题的关键就是协程,之前写过关于Fiber的文章,只不过它并不是那么灵活,出于对内部机制的好奇,我准备再造一个轮子,自己实现协程。

阅读剩余部分

Linux下的Time处理

HTTP协议中,有很多机制都和Time有关,这里先撇开缓存控制及过期机制,就拿Date开刀。

Date的格式大致如下:

Tue, 21 Jul 2015 21:19:41 GMT

好,现在问题就来了,如何得到这个字符串?先别急,本文将会对Linux下Time的格式化以及转换做一下解读。

阅读剩余部分

基于Redis实现HttpSession

6月忙着毕业,很是尴尬没能坚持写点博客,不过7月争取补上这些债务。

最近,又在继续写应用服务器了,算是有点进展,之后就可以陆续谈一些这方面的内容。对于实现应用服务器这一块,个人认为存在如下几个难点:

  • 并发模型的选择与实现
  • HTTP协议解析模块的实现,尤其是现在又多了个HTTP/2.0
  • 应用框架的实现,主要是路由模块、IoC的实现方式以及基本的DI等

要实现应用框架,就必须提供基本的概念抽象,如Request、Response和Session等。Request和Response充其量是体力活,而Session的实现则需要慎重考虑了。

本文就为大家带来HttpSession实现方面的内容,思想为主,代码为辅。

阅读剩余部分

动态链接库 for D

本文是动态链接库的第二版,前一版本只适用于Linux,但是这一版本添加了windows相关内容。

本文的内容是我在实现c2db的时候总结出来的。c2db是一个简单的ORM(实现中),它提供了一个接口层,下面有针对各种数据库独立实现的Driver,使用的时候我们只需要动态加载(而不是编译)就行了。针对这种需求,目前我们已经能够提供基本的跨平台实现,这里的平台主要是指posix和windows。

本文不再声称支持C/C++,因为个别原因,我们不得不使用core.runtime中已经跨平台的接口,因此细节部分不再是由我们来实现了。

阅读剩余部分