<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>评论：redis源代码分析9–事件处理（中）</title>
	<atom:link href="http://www.petermao.com/redis/86.html/feed" rel="self" type="application/rss+xml" />
	<link>http://www.petermao.com/redis/86.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=86</link>
	<description>欢迎探讨，共同进步</description>
	<lastBuildDate>Tue, 24 Mar 2026 07:36:25 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
	<item>
		<title>由：petermao</title>
		<link>http://www.petermao.com/redis/86.html#comment-12918</link>
		<dc:creator>petermao</dc:creator>
		<pubDate>Tue, 27 Aug 2013 02:27:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.petermao.com/?p=35#comment-12918</guid>
		<description>可以参考下zhihu上的讨论：
http://www.zhihu.com/question/20502870</description>
		<content:encoded><![CDATA[<p>可以参考下zhihu上的讨论：<br />
<a href="http://www.zhihu.com/question/20502870" rel="nofollow">http://www.zhihu.com/question/20502870</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>由：timebug</title>
		<link>http://www.petermao.com/redis/86.html#comment-11674</link>
		<dc:creator>timebug</dc:creator>
		<pubDate>Fri, 16 Mar 2012 06:36:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.petermao.com/?p=35#comment-11674</guid>
		<description>您好，请问redis中的epoll模型没有采用更为高效的ET模式有什么原因吗？</description>
		<content:encoded><![CDATA[<p>您好，请问redis中的epoll模型没有采用更为高效的ET模式有什么原因吗？</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：xiaogang</title>
		<link>http://www.petermao.com/redis/86.html#comment-11673</link>
		<dc:creator>xiaogang</dc:creator>
		<pubDate>Mon, 12 Mar 2012 05:19:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.petermao.com/?p=35#comment-11673</guid>
		<description>你好，REDIS_NOTUSED(eventLoop)，如何理解</description>
		<content:encoded><![CDATA[<p>你好，REDIS_NOTUSED(eventLoop)，如何理解</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：petermao</title>
		<link>http://www.petermao.com/redis/86.html#comment-10994</link>
		<dc:creator>petermao</dc:creator>
		<pubDate>Tue, 28 Feb 2012 10:28:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.petermao.com/?p=35#comment-10994</guid>
		<description>不知道我的理解对不对，A循环执行并且该循环时间比较短（就是你说的100ms），而且执行很慢（你插入那个B好像也就是这个意思吧，其实这个无所谓，可以还有B、C、D，无非就是模拟中间还有其他函数费了不少时间），导致的结果就是A超时后处理然后继续超时，继续调用A的超时函数导致循环，因为redis在处理完一个超时事件后会返回到链表头重新检查。

这个确实形成了死循环。但这没有逻辑问题。从要求上讲，A要求定时执行，既然超时了（每次返回到链表头检查时），当然要执行罗。。。

只能说redis不适合这种场景。redis适合于IO密集型，不适合计算密集型。问题中由于A、又有B，导致B处理完A就超时了，典型的计算密集型，CPU根本就没有空出来啊~  网络操作是IO密集型，redis才有用武之地。另一方面，记得redis整个源码中也只添加了serverCron一个定时器，而且这个函数的执行应该需要严格控制，比如那个redis中的db数就不应太多，so其实那个定时器链表其实没什么用，也难怪查找时作者说没有优化的必要了。。。

想起了之前别人问过我的一个问题，也是关于这个time链表。这个链表是无序的，如果链表上有大量的超时time，按照这个顺序处理逻辑就可能不对了。因为按理说至少要排个序嘛，超时也得有个先后。。。当时很囧，没有代码在手边，没回答上这样做在redis中会不会存在问题。道理其实很简单，因为redis中暂时就一个time嘛。。。当然，如果要迁移这个框架为你所用，是需要改改的。。。比如可以用跳表、堆什么的优化一下。。。。</description>
		<content:encoded><![CDATA[<p>不知道我的理解对不对，A循环执行并且该循环时间比较短（就是你说的100ms），而且执行很慢（你插入那个B好像也就是这个意思吧，其实这个无所谓，可以还有B、C、D，无非就是模拟中间还有其他函数费了不少时间），导致的结果就是A超时后处理然后继续超时，继续调用A的超时函数导致循环，因为redis在处理完一个超时事件后会返回到链表头重新检查。</p>
<p>这个确实形成了死循环。但这没有逻辑问题。从要求上讲，A要求定时执行，既然超时了（每次返回到链表头检查时），当然要执行罗。。。</p>
<p>只能说redis不适合这种场景。redis适合于IO密集型，不适合计算密集型。问题中由于A、又有B，导致B处理完A就超时了，典型的计算密集型，CPU根本就没有空出来啊~  网络操作是IO密集型，redis才有用武之地。另一方面，记得redis整个源码中也只添加了serverCron一个定时器，而且这个函数的执行应该需要严格控制，比如那个redis中的db数就不应太多，so其实那个定时器链表其实没什么用，也难怪查找时作者说没有优化的必要了。。。</p>
<p>想起了之前别人问过我的一个问题，也是关于这个time链表。这个链表是无序的，如果链表上有大量的超时time，按照这个顺序处理逻辑就可能不对了。因为按理说至少要排个序嘛，超时也得有个先后。。。当时很囧，没有代码在手边，没回答上这样做在redis中会不会存在问题。道理其实很简单，因为redis中暂时就一个time嘛。。。当然，如果要迁移这个框架为你所用，是需要改改的。。。比如可以用跳表、堆什么的优化一下。。。。</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：seaky</title>
		<link>http://www.petermao.com/redis/86.html#comment-10095</link>
		<dc:creator>seaky</dc:creator>
		<pubDate>Sun, 19 Feb 2012 10:18:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.petermao.com/?p=35#comment-10095</guid>
		<description>请教下，redis的实现的框架中，定时器事件还是有死循环的可能啊，假设有两个事件A和B，A是链表头,A每100ms执行一次，B执行需要150ms。

那么首先执行A，A执行完后，设置下次超时时间，然后从A开始执行，此时A还没超时跳过执行，执行B，B执行完后又从头开始执行，此时A已经超时，执行A，这时不是死循环了吗</description>
		<content:encoded><![CDATA[<p>请教下，redis的实现的框架中，定时器事件还是有死循环的可能啊，假设有两个事件A和B，A是链表头,A每100ms执行一次，B执行需要150ms。</p>
<p>那么首先执行A，A执行完后，设置下次超时时间，然后从A开始执行，此时A还没超时跳过执行，执行B，B执行完后又从头开始执行，此时A已经超时，执行A，这时不是死循环了吗</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：petermao</title>
		<link>http://www.petermao.com/redis/86.html#comment-8372</link>
		<dc:creator>petermao</dc:creator>
		<pubDate>Mon, 06 Feb 2012 03:08:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.petermao.com/?p=35#comment-8372</guid>
		<description>嗯~~ 是这样的~~</description>
		<content:encoded><![CDATA[<p>嗯~~ 是这样的~~</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：timebug</title>
		<link>http://www.petermao.com/redis/86.html#comment-6803</link>
		<dc:creator>timebug</dc:creator>
		<pubDate>Wed, 25 Jan 2012 09:32:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.petermao.com/?p=35#comment-6803</guid>
		<description>呃 是我没看仔细。现在明白了，之前没考虑到te-&gt;timeProc(eventLoop, id, te-&gt;clientData)可能会注册timeEvent事件。</description>
		<content:encoded><![CDATA[<p>呃 是我没看仔细。现在明白了，之前没考虑到te-&gt;timeProc(eventLoop, id, te-&gt;clientData)可能会注册timeEvent事件。</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：timebug</title>
		<link>http://www.petermao.com/redis/86.html#comment-6798</link>
		<dc:creator>timebug</dc:creator>
		<pubDate>Wed, 25 Jan 2012 08:47:51 +0000</pubDate>
		<guid isPermaLink="false">http://www.petermao.com/?p=35#comment-6798</guid>
		<description>你好，请问：“中间注册的id必然比maxid大”这句话如何理解？eventLoop-&gt;timeEventNextId不是每次注册一个timeEvent事件就加1吗？为何这里还会有te-&gt;id大于maxId？</description>
		<content:encoded><![CDATA[<p>你好，请问：“中间注册的id必然比maxid大”这句话如何理解？eventLoop-&gt;timeEventNextId不是每次注册一个timeEvent事件就加1吗？为何这里还会有te-&gt;id大于maxId？</p>
]]></content:encoded>
	</item>
</channel>
</rss>
