1. 程式人生 > >redis資料模型

redis資料模型

檔案事件處理器的構成

圖 IMAGE_CONSTRUCT_OF_FILE_EVENT_HANDLER 展示了檔案事件處理器的四個組成部分, 它們分別是套接字、 I/O 多路複用程式、 檔案事件分派器(dispatcher)、 以及事件處理器。

digraph {    label = "\n 圖 IMAGE_CONSTRUCT_OF_FILE_EVENT_HANDLER    檔案事件處理器的四個組成部分";    rankdir = LR;    node [shape = box];    subgraph cluster_sockets {        style = dashed        label = "套接字";        c1 [label = "s1", shape = circle];        c2 [label = "s2", shape = circle];        other_client [label = "...", width = 1.1, shape = plaintext];        c3 [label = "sN", shape = circle];    }    io_multiplexing [label = "I\n/\nO\n多\n路\n復\n用\n程\n序"];    file_event_processor [label = "文\n件\n事\n件\n分\n派\n器"];    subgraph cluster_handlers {        style = dashed        label = "事件處理器";        write_handler [label = "命令請求處理器"];        read_handler [label = "命令回覆處理器"];        connect_handler [label = "連線應答處理器"];        other_handlers [label = "...", width = 1.6];    }    c1 -> io_multiplexing;    c2 -> io_multiplexing;    other_client -> io_multiplexing [style = invis];    c3 -> io_multiplexing;    io_multiplexing -> file_event_processor;    file_event_processor -> write_handler;    file_event_processor -> read_handler;    file_event_processor -> connect_handler;    file_event_processor -> other_handlers;}

檔案事件是對套接字操作的抽象, 每當一個套接字準備好執行連線應答(accept)、寫入、讀取、關閉等操作時, 就會產生一個檔案事件。 因為一個伺服器通常會連線多個套接字, 所以多個檔案事件有可能會併發地出現。

I/O 多路複用程式負責監聽多個套接字, 並向檔案事件分派器傳送那些產生了事件的套接字。

儘管多個檔案事件可能會併發地出現, 但 I/O 多路複用程式總是會將所有產生事件的套接字都入隊到一個佇列裡面, 然後通過這個佇列, 以有序(sequentially)、同步(synchronously)、每次一個套接字的方式向檔案事件分派器傳送套接字: 當上一個套接字產生的事件被處理完畢之後(該套接字為事件所關聯的事件處理器執行完畢), I/O 多路複用程式才會繼續向檔案事件分派器傳送下一個套接字, 如圖 IMAGE_DISPATCH_EVENT_VIA_QUEUE 。

digraph {    rankdir = LR;    node [shape = record];    label = "\n圖 IMAGE_DISPATCH_EVENT_VIA_QUEUE    I/O 多路複用程式通過佇列向檔案事件分派器傳送套接字";    //    subgraph cluster_io_multiplexing {        //style = dashed        label = "佇列";        queue [label = " { 套接字 sN | 套接字 sN-1 | ... | 套接字 s3 | 套接字 s2 } "];    }    file_event_processor [label = "文\n件\n事\n件\n分\n派\n器"];    //    queue -> file_event_processor [label = "傳送\n 套接字 s1", style = dashed];}

檔案事件分派器接收 I/O 多路複用程式傳來的套接字, 並根據套接字產生的事件的型別, 呼叫相應的事件處理器。

伺服器會為執行不同任務的套接字關聯不同的事件處理器, 這些處理器是一個個函式, 它們定義了某個事件發生時, 伺服器應該執行的動作。