<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ## 總結 使用環形隊列 ## 案例 如果連續30s沒有請求包(例如登錄,消息,keepalive包),服務端就要將這個用戶的狀態置為離線 ## 輪詢掃描法 1. 用一個`Map<uid, last_packet_time>`來記錄每一個uid最近一次請求時間last_packet_time 2. 當某個用戶uid有請求包來到,實時更新這個Map 3. 啟動一個timer,當Map中不為空時,輪詢掃描這個Map,看每個uid的last_packet_time是否超過30s,如果超過則進行超時處理 > 只啟動一個timer,但需要輪詢,效率較低 ## 多timer觸發法 1. 用一個`Map<uid, last_packet_time>`來記錄每一個uid最近一次請求時間last_packet_time 3. 當某個用戶uid有請求包來到,實時更新這個Map,并同時對這個uid請求包啟動一個timer,30s之后觸發 3. 每個uid請求包對應的timer觸發后,看Map中,查看這個uid的last_packet_time是否超過30s,如果超過則進行超時處理 > 不需要輪詢,但每個請求包要啟動一個timer,比較耗資源 ## 環形隊列法 1. 30s超時,就創建一個index從0到30的環形隊列(本質是個數組) 2. 環上每一個slot是一個Set<uid>,任務集合 3. 同時還有一個`Map<uid, index>`,記錄uid落在環上的哪個slot里 同時: 1. 啟動一個timer,每隔1s,在上述環形隊列中移動一格,`0->1->2->3…->29->30->0…` 2. 有一個Current Index指針來標識剛檢測過的slot 當有某用戶uid有請求包到達時: 1. 從Map結構中,查找出這個uid存儲在哪一個slot里 2. 從這個slot的Set結構中,刪除這個uid 3. 將uid重新加入到新的slot中,具體是哪一個slot呢 => Current Index指針所指向的上一個slot,因為這個slot,會被timer在30s之后掃描到 4. 更新Map,這個uid對應slot的index值 哪些元素會被超時掉呢? Current Index每秒種移動一個slot,**這個slot對應的`Set<uid>`中所有uid都應該被集體超時**!如果最近30s有請求包來到,一定被放到Current Index的前一個slot了,Current Index所在的slot對應Set中所有元素,都是最近30s沒有請求包來到的。 所以,當沒有超時時,Current Index掃到的每一個slot的Set中應該都沒有元素。 優勢: 1. 只需要1個timer 2. timer每1s只需要一次觸發,消耗CPU很低 3. 批量超時,Current Index掃到的slot,Set中所有元素都應該被超時掉
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看