异步请求池的原理

异步请求池的原理

一 为什么需要异步请求池

请求指的是程序请求第三方的服务。如果采用同步的方式处理第三方请求,那么就只有等到第三方请求返回后,程序才能继续向下运行。这种处理方式是非常低效的。
为了解决这个问题,异步请求就被提出来了。异步请求指的是主程序的执行和请求的处理是分开的,异步的,两者可以并发的运行。当遇到请求操作时,主程序只需要发送请求命令,等待请求结果的返回则交由另一个线程处理。
当主请求需要处理大量的请求操作时,可以将所有请求结果的等待和处理都交由另一个线程处理。这就是异步请求池。

二 异步请求池的原理

这里用IO请求举例子。

当主程序发出IO请求时,创建相应的fd,并将内容send出去,然后将此fd加入epoll中,最后继续处理其他的代码。

在另一个集中处理IO返回的线程中,使用epoll_wait等待返回内容就绪的fd,并处理它的返回结果。这样,利用epoll,就把IO请求的等待结果的过程和主程序分类开了。

三 异步请求池的实现

异步请求池大致需要这些接口:

1.init
2.commit
3.thread_callback
4.init
5.destroy

这些接口也算是比较标准的一个异步请求的接口。
各个接口的中要做的事情大致如下:
1.init
a.epoll_create
b.pthread_create
这个接口要做的事情就是创建epfd和请求处理线程

2.commit
a.socket
b.connect server
c.encode–>redis/mysql/dns
d.send
e.fd->epoll
这个接口要做的事情就是创建网络套接字并连接到目标服务器,然后准备要发送的数据,并把数据发送出去。最后把这个网络套接字加入epoll。

3.thread_callback
while(1){
epoll_wait();
recv();
parser();
fd–>epoll delete
}
这个接口是请求处理线程主程序,负责处理准备就绪的网络套接字的返回值。当有网络套接字准备就绪后,首先获取这个网络套接字从服务器接收到的内容,然后解析并处理它,最后将这个fd从epoll中删除。

4.destroy
close(fd);
pthread_cancel(thid);
这是销毁请求池的接口,它会将网络套接字和请求处理线程全部销毁。

异步请求基本就是这个流程。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值