协程这个概念很久了,好多程序员是实现过这个组件的,网上关于协程的文章,博客,论坛都是汗牛充栋,在知乎,github上面也有很多大牛写了关于协程的心得体会。突发奇想,我也来实现一个这样的组件,并测试了一下性能。借鉴了很多大牛的思想,阅读了很多大牛的代码。于是把整个思考过程写下来。实现代码https://github.com/wangbojing/NtyCo代码简单易读,如果在你的项目中,NtyCo能够为你解决些许工程问题,那就荣幸之至。
下面将部分的NtyCo的代码贴出来。
NtyCo 支持多核多进程。
NtyCo 上下文切换
首先来回顾一下x86_64寄存器的相关知识。x86_64 的寄存器有16个64位寄存器,分别是:%rax, %rbx, %rcx, %esi, %edi, %rbp, %rsp, %r8, %r9, %r10, %r11, %r12,%r13, %r14, %r15。%rax 作为函数返回值使用的。%rsp 栈指针寄存器,指向栈顶%rdi, %rsi, %rdx, %rcx, %r8, %r9 用作函数参数,依次对应第1参数,第2参数。。。%rbx, %rbp, %r12, %r13, %r14, %r15 用作数据存储,遵循调用者使用规则,换句话说,就是随便用。调用子函数之前要备份它,以防它被修改%r10, %r11 用作数据存储,就是使用前要先保存原值。上下文切换,就是将CPU的寄存器暂时保存,再将即将运行的协程的上下文寄存器,分别mov到相对应的寄存器上。此时上下文完成切换。如下图所示:
代码如下
协程的调度器
调度器的实现,有两种方案,一种是生产者消费者模式,另一种多状态运行。
逻辑代码如下:
多状态运行实现逻辑代码如下:
性能测试开发云主机域名测试环境:4台VMWare 虚拟机1台服务器 6G内存,4核CPU3台客户端 2G内存,2核CPU操作系统:ubuntu 14.04服务器端测试代码:https://github.com/wangbojing/NtyCo客户端测试代码:https://github.com/wangbojing/c1000k_test/blob/master/client_mutlport_epoll.c按照每一个连接启动一个协程来测试。协程启动数量能够达70W无异常。
BAT, 滴滴,今日头条,美图,美团等一线内推 技术岗位内推QQ群:935760465
今天小编给大家分享的是如何查看linux共享文件夹位置的方法,相信很多人都不太了解,为了让大家更加了解查看linux共享文件夹位置的方法,所以给大家总结了开发云主机域名以下内容,一起往下看吧。一定会有所收获的哦。1、首先,打开VMware,点击编辑虚拟机设置。…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。