老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

Redis線程IO模型的示例分析

小編給大家分享一下redis線程IO模型的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

大連ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創新互聯的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

那么既然是單線程的為什么還這么快呢?

Redis的數據都在內存里面,所有的運算都是內存級別,處理數據是非常快速的,所以這里得注意一些復雜度為O(n)的指令,可能會導致服務器卡頓。

那么Redis是一個單線程是如何處理并發客戶端的連接呢?

這就是接下來要講的非阻塞IO多路復用事件輪詢API

非阻塞IO

那什么是阻塞IO模型?即在讀寫數據過程中會發生阻塞現象。

當用戶線程發出IO請求之后,內核會去查看數據是否就緒,如果沒有就緒就會等待數據就緒,而用戶線程就會處于阻塞狀態,用戶線程交出CPU。當數據就緒之后,內核會將數據拷貝到用戶線程,并返回結果給用戶線程,用戶線程才解除block狀態。

####阻塞IO模型,如果數據沒有就緒,就會一直阻塞在read方法。data = socket.read();

非阻塞IO

當用戶線程發起一個read操作后,并不需要等待,而是馬上就得到了一個結果,不管你有沒有發送進來,會立即執行下一行代碼。如果結果是一個error時,它就知道數據還沒有準備好,于是它可以再次發送read操作。一旦內核中的數據準備好了,并且又再次收到了用戶線程的請求,那么它馬上就將數據拷貝到了用戶線程,然后返回。

非阻塞IO有個問題,那就是線程要讀數據,  結果讀了一部分就返回了,那么線程如何知道何時才應該繼續讀,也就是說,當數據到來時,線程如何得到通知。寫也是一樣,如果緩沖區滿了,寫不完,剩下的數據何時才應該繼續寫,線程也應該得到通知。那么  事件輪詢API就是解決這個問題。
多路復用(事件輪詢)  

最簡單的事件輪詢API是select函數,它是操作系統提供給用戶程序的API。輸入是讀寫描述符列表read_fds&write_fds,輸出是與之對應的可讀可寫事件。同時還提供了一個timeout參數,如果沒有任何事件到來,那么就最多等待timeout的值的時間,線程處于阻塞狀態。一旦期間有任何事件到來,就可以立即返回。時間過了之后還是沒有任何事件到來,也會主即返回 。

因為我們通過select系統調用同時處理多個通道描述待的讀寫事件,因此我們將這類系統調用稱為多路復用API。現代操作系統的多路復用API已經不再使用select系統調用,而改用epoll(linux)和kqueue(FreeBSD)和(macosx),因為select系統調用的性能在描述符特別多時會變得非常差。它們使用起來可能在形式上略有差異,但是本質上都是差不多的,都可以使用上面的偽代碼邏輯進行理解。

指令隊列

Redis會將每個客戶端套接字都關聯一個指令隊列。客戶端的指令通過隊列來排隊進行順序處理,先到先服務。

響應隊列

Redis同樣也會為每個客戶端套接字關聯一個晌應隊列。Redis服務器通過響應隊列來將指令的返回結果回復給客戶端。

如果隊列為空,那么意昧著連接暫時處于空閑狀態,不需要去獲取寫事件,也就是可以將當前的客戶端描述符從write_fds里面移出來。等到隊列有數據了,再將描述符放進去,避免select系統調用立即返回寫事件,結果發現沒什么數據可以寫,出現這種情況的線程會令CPU消耗飄升。

定時任務

服務器除了要響應IO事件外,還要處理其他事情。比如定時任務就是非常重要的一件事。如果線程阻塞在select系統調用上,定時任務將無法得到準時調度。那Redis是如何解決這個問題的呢?
Redis的定時任務會記錄在一個被稱為“最小堆”的數據結構中。在這個堆中,
最快要執行的任務排在堆的最上方。在每個循環周期里,Redis都會對最小堆里面已經到時間點的任務進行處理。處理完畢后,將最快要執行的任務還需要的時間記錄下來,這個時間就是select系統調用的timeout參數。因為Redis知道未來timeout的值的時間內,沒有其他定時任務需要處理,所以可以安心睡眠 timeout 的值的時間。

Nginx和Node的事件處理原理和Redis也是類似的。

以上是“Redis線程IO模型的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道!


網站名稱:Redis線程IO模型的示例分析
文章分享:http://www.xueling.net.cn/article/jihsoc.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 久久久亚洲欧洲日产AV | 色婷婷一区 | 91动漫在线观看 | 成全视频免费观看在线看黑人 | 国产精品亚洲第一区二区三区 | 国产一区欧美日韩精品 | 日韩欧美一区二区三区免费看 | 国产一区二区三区在线2021 | 色婷婷综合久久久中文一区二区 | 最新99热| 中文高清av| 国产精品日韩欧美一区二区视频 | 中文字幕在线观看www | 全黄H全肉边做边吃奶视频 9999在线视频 | 国产亚洲欧洲网友拍 | 国产无遮挡又爽又刺激的视频老师 | 91在线观看视频 | 人妻人妻人人人 | 中文字幕在线网 | 日美一级片 | 国产精品美女自拍视频 | 午夜视频在线 | 欧美肥婆丰满bbw | 全黄H全肉边做边吃奶视频 9999在线视频 | 亚洲成av人影片在线观看 | 久久9999久久| 天天爽视频 | 色站综合| 中文字幕一区av | 九色精品国产 | 日本少妇三级HD激情在线观看 | 午夜视频日本 | 在线观看一区二区三区视频 | 精品在线视频一区二区 | 和寡妇做爰过程a一片 | 国产传媒果冻天美传媒怎么入职 | 日日操夜夜爱 | 在线观看日韩欧美 | 91久久国产综合精品女同 | 亚洲天堂2017无码中文 | 精品日韩一区二区三区 |