读爱奇艺开源协程项目—libfiber

本文介绍了爱奇艺开源的libfiber库,它是一个高效的协程实现,性能优于腾讯的libco。libfiber利用Linux的接口进行上下文切换,而libco则使用汇编实现。此外,文章探讨了协程在IO操作中的应用,以及为何需要hook系统API以实现同步方式的异步操作。libfiber提供C和C++ API,并特别适合于IO密集型的web服务器场景。
1、libfiber介绍

首先说下为什么要写这个博客,一是记录自己学习,二是防止学习后遗忘,这样即使忘了还可以通过博客来回忆起一个大概
开源项目位置:https://github.com/iqiyi/libfiber
libfiber中文介绍:https://github.com/iqiyi/libfiber/blob/master/README_cn.md
开源团队:爱奇艺
相关协程的开源项目不少,boost,libco,libfiber等等
协程的概念在此就不说了,不过协程的实现可以简单说下,我只看过libco和libfiber这两个协程的代码,其中libco是由腾讯团队自己写的汇编实现的协程,协程本质其实是保存当前堆栈信息,然后创造出一个新的堆栈环境去执行(自己思考的,有错误望指出)。而爱奇艺则是借助linux下给出的已有的接口,在此接口上进行一系列逻辑操作, 接口在头文件ucontext.h。
据爱奇艺给出的测评,libfiber性能高于libco。
在这里插入图片描述

// libco 实际切换上下文的代码
.globl coctx_swap
#if !defined( __APPLE__ )
.type  coctx_swap, @function
#endif
coctx_swap:

#if defined(__i386__)
    movl 4(%esp), %eax
    movl %esp,  28(%eax)
    movl %ebp, 24(%eax)
    movl %esi, 20(%eax)
    movl %edi, 16(%eax)
    movl %edx, 12(%eax)
    movl %ecx, 8(%eax)
    movl %ebx, 4(%eax)


    movl 8(%esp), %eax
    movl 4(%eax), %ebx
    movl 8(%eax), %ecx
    movl 12(%eax), %edx
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值