From e1e455724ed82806713272b4a32ff9f14a5c2ff1 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Thu, 21 Jun 2018 16:03:43 +0800 Subject: [PATCH] auto commit --- notes/Redis.md | 12 +----------- pics/c0a9fa91-da2e-4892-8c9f-80206a6f7047.png | Bin 0 -> 28672 bytes 2 files changed, 1 insertion(+), 11 deletions(-) create mode 100644 pics/c0a9fa91-da2e-4892-8c9f-80206a6f7047.png diff --git a/notes/Redis.md b/notes/Redis.md index 90f8e4a5..cab47ca5 100644 --- a/notes/Redis.md +++ b/notes/Redis.md @@ -498,26 +498,19 @@ Redis 将所有时间事件都放在一个无序链表中,通过遍历整个 ```python def aeProcessEvents(): - # 获取到达时间离当前时间最接近的时间事件 time_event = aeSearchNearestTimer() - # 计算最接近的时间事件距离到达还有多少毫秒 remaind_ms = time_event.when - unix_ts_now() - # 如果事件已到达,那么 remaind_ms 的值可能为负数,将它设为 0 if remaind_ms < 0: remaind_ms = 0 - # 根据 remaind_ms 的值,创建 timeval timeval = create_timeval_with_ms(remaind_ms) - # 阻塞并等待文件事件产生,最大阻塞时间由传入的 timeval 决定 aeApiPoll(timeval) - # 处理所有已产生的文件事件 procesFileEvents() - # 处理所有已到达的时间事件 processTimeEvents() ``` @@ -526,21 +519,18 @@ def aeProcessEvents(): ```python def main(): - # 初始化服务器 init_server() - # 一直处理事件,直到服务器关闭为止 while server_is_not_shutdown(): aeProcessEvents() - # 服务器关闭,执行清理操作 clean_server() ``` 从事件处理的角度来看,服务器运行流程如下: -

+

# 十二、复制 diff --git a/pics/c0a9fa91-da2e-4892-8c9f-80206a6f7047.png b/pics/c0a9fa91-da2e-4892-8c9f-80206a6f7047.png new file mode 100644 index 0000000000000000000000000000000000000000..add3c5d4d6c941e9253fff7169728efa9307f8ed GIT binary patch literal 28672 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 literal 0 HcmV?d00001