c之libmemcached之memcached_mget 似乎阻塞
kevingrace
阅读:12
2024-11-01 17:39:52
评论:0
我有一个内存缓存服务器。我使用 libmemcached C api 与它交互。我正在使用非阻塞模式和无回复模式(行为标志)。
如果有帮助,我还在 nginx C 模块中使用 libmemcached。
问题是 memcached_mget 似乎会阻塞,即对于延迟大约为 40 毫秒的服务器,memcached_mget 需要 40 毫秒才能完成。这不完全是异步的。
这是我使用的代码:
const char* localKeys[2] = {"key1", "key2"};
size_t k_length[2] = {4, 4};
gettimeofday(&t1, NULL);
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0, "no block: %d ", memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NO_BLOCK));
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0, "no reply: %d ", memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NOREPLY));
retFt = memcached_mget(memc, localKeys, k_length, 2);
gettimeofday(&t2, NULL);
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, log, 0, "memcached_mget duration (microseconds): %d, result : %d", t2.tv_usec - t1.tv_usec, retFt);
retFt = memcached_fetch_execute(memc, fp, &callback_struct, 1);
我正在使用 ASCII 协议(protocol)。也尝试使用二进制,但没有帮助。 我还尝试了 memcached_mget_execute。 我正在使用 tc 模拟延迟,就像这样:
tc qdisc add dev lo root netem delay 20ms
请您参考如下方法:
libmemcached 的 API 总是阻塞的。 “非阻塞”模式只是在套接字上设置该标志。如果您使用该标志,libmemcached 会通过调用 poll() 进行自己的阻塞。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。