Asyn mode是OpenSSL支持异步I/O(AIO)的模式,在这个模式下openssl把硬件加速卡等不占用cpu的操作剥离出来,单独交给一个叫asyn job的结构去做。在asyn job执行的过程中,cpu可以把当前任务暂停,切换上下文(保存/恢复栈,寄存器等,用__setjump, longjump实现)返回给user。User需要主动(或者等待硬件加速卡的事件通知)去epoll这个async job的状态,是否是ASYNC_FINISHED状态。如果是,说明之前的任务已经完成,则可以继续后面的操作(取回加密/解密结果)。
相关Linux API———ucontext族函数
Linux C中的协程主要使用ucontext族函数来实现,在使用感受上类似于经常使用的goto语句(ucontext族函数可以跨函数)。
man手册中对makecontext,swapcontext函数进行如下描述。
NAME
makecontext, swapcontext - manipulate user context
SYNOPSIS
#include <ucontext.h>
void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...);
int swapcontext(ucontext_t *oucp, ucontext_t *ucp);
DESCRIPTION
In a System V-like environment, one has the type ucontext_t defined in <ucontext.h> and the four functions getcontext(3), setcontext(3), makecontext() and swapcon‐text() that allow user-level conte