我在多线程环境中使用 Redis,并且有一个关于它如何运行的问题。我在我的 C++ 应用程序中使用hiredis c 库。
我的问题是:如果我在触发回调时使用异步模式,回调是否会在 Redis 客户端创建的另一个线程中处理?就像创建调用的线程不会受到回调处理的影响吗?谢谢!
Redis客户端不会创建任何额外的客户端线程,并在现有线程中工作。
Redis 在另一个(主)进程中工作。您使用的 Redis API 在本地进程中工作,并使用进程间通信与主进程进行通信。异步请求意味着您的进程或线程将任务交给另一个进程或线程,然后可以执行任何其他您的任务或等待事件。一段时间后,异步回复到达您的应用程序并可供使用。您的应用程序必须使用https://en.wikipedia.org/wiki/Event_loop https://en.wikipedia.org/wiki/Event_loop或任何通过调用回调来处理事件(在本例中为 redis 应答)来通知您的异步管理系统。
异步架构意味着您运行事件循环来为每个事件调用回调处理程序。调用回调时,您可以创建许多异步任务。一旦任务创建,当任务完成或发生错误时,回调事件处理程序将被调用。回调可以分配给启动应用程序或出现新的网络连接。当调用回调时,您可以创建redis任务,稍后将调用结果事件回调。当前线程中的所有内容。我有多个线程,可以合理地期望每个线程都有一个事件循环。
Redis的单线程性质:http://redis.io/topics/latency#single-threaded-nature-of-redis http://redis.io/topics/latency#single-threaded-nature-of-redis
由于 Redis 使用多路复用和非阻塞 I/O,因此客户端套接字处于非阻塞状态。http://redis.io/topics/clients http://redis.io/topics/clients这意味着您的客户端永远不会被阻止。
从Redis 2.4开始,Redis中的线程仅用于在后台执行一些缓慢的I/O操作,主要与磁盘I/O相关,但这并不能改变Redis使用单个线程服务所有请求的事实。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)