hiredis Redis库是否为异步回调创建自己的线程

447*_*701 6 c c++ database redis

我在多线程环境中使用Redis,并对其运行方式有疑问.我在我的c ++应用程序中使用hiredis c库.

我的问题是:如果我在触发回调时使用异步模式,那么回调是否会在Redis客户端创建的另一个线程中处理?因为创建调用的线程不会受到回调处理的影响吗?谢谢!

okl*_*las 2

Redis客户端不会创建任何额外的客户端线程,并在现有线程中工作。

\n\n

Redis 在另一个(主)进程中工作。您使用的 Redis API 在本地进程中工作,并使用进程间通信与主进程进行通信。异步请求意味着您的进程或线程将任务交给另一个进程或线程,然后可以执行任何其他您的任务或等待事件。一段时间后,异步回复到达您的应用程序并可供使用。您的应用程序必须使用https://en.wikipedia.org/wiki/Event_loop或任何通过调用回调来处理事件(在本例中为 redis 应答)来通知您的异步管理系统。

\n\n

异步架构意味着您运行事件循环来为每个事件调用回调处理程序。调用回调时,您可以创建许多异步任务。一旦任务创建,当任务完成或发生错误时,回调事件处理程序将被调用。回调可以分配给启动应用程序或出现新的网络连接。当调用回调时,您可以创建redis任务,稍后将调用结果事件回调。当前线程中的所有内容。我 \xd0\xbdou 有多个线程,可以合理地期望每个线程都有一个事件循环。

\n\n

Redis 的单线程性质:http://redis.io/topics/latency#single-threaded-nature-of-redis

\n\n

由于 Redis 使用多路复用和非阻塞 I/O,因此客户端套接字处于非阻塞状态。http://redis.io/topics/clients这意味着你的客户端永远不会被阻止。

\n\n

从Redis 2.4开始,Redis中的线程仅用于在后台执行一些缓慢的I/O操作,主要与磁盘I/O相关,但这并不能改变Redis使用单个线程服务所有请求的事实。

\n