貴州省城鄉(xiāng)和建設(shè)廳網(wǎng)站seo優(yōu)化的作用
redis為什么這么快?
比較容易答出的答案
1)純粹的內(nèi)存操作
2)單線程操作,不用考慮線程切換
其他優(yōu)勢(shì)
3)I/O 多路復(fù)用,使用epoll
4)Reactor 設(shè)計(jì)模式
I/O 多路復(fù)用有三種
select、poll、epoll
select:使用數(shù)組存儲(chǔ)輪詢
poll:使用鏈表輪詢
epoll:使用回調(diào),數(shù)據(jù)保留至map中
epoll還有一個(gè)優(yōu)勢(shì),使用了mmap文件映射內(nèi)存加速與內(nèi)核空間的消息傳遞
利用 mmap() 替換 read(),配合 write() 調(diào)用的整個(gè)流程如下:
用戶進(jìn)程調(diào)用 mmap(),從用戶態(tài)陷入內(nèi)核態(tài),將內(nèi)核緩沖區(qū)映射到用戶緩存區(qū);
DMA 控制器將數(shù)據(jù)從硬盤拷貝到內(nèi)核緩沖區(qū)(可見(jiàn)其使用了 Page Cache 機(jī)制);
mmap() 返回,上下文從內(nèi)核態(tài)切換回用戶態(tài);
用戶進(jìn)程調(diào)用 write(),嘗試把文件數(shù)據(jù)寫到內(nèi)核里的套接字緩沖區(qū),再次陷入內(nèi)核態(tài);
CPU 將內(nèi)核緩沖區(qū)中的數(shù)據(jù)拷貝到的套接字緩沖區(qū);
DMA 控制器將數(shù)據(jù)從套接字緩沖區(qū)拷貝到網(wǎng)卡完成數(shù)據(jù)傳輸;
write() 返回,上下文從內(nèi)核態(tài)切換回用戶態(tài)。
MDA具體過(guò)程:
用戶進(jìn)程調(diào)用 read 方法,向操作系統(tǒng)發(fā)出 I/O 請(qǐng)求,請(qǐng)求讀取數(shù)據(jù)到自己的內(nèi)存緩沖區(qū)中,進(jìn)程進(jìn)入阻塞狀態(tài);
操作系統(tǒng)收到請(qǐng)求后,進(jìn)一步將 I/O 請(qǐng)求發(fā)送 DMA,然后讓 CPU 執(zhí)行其他任務(wù);
DMA 進(jìn)一步將 I/O 請(qǐng)求發(fā)送給磁盤;
磁盤收到 DMA 的 I/O 請(qǐng)求,把數(shù)據(jù)從磁盤讀取到磁盤控制器的緩沖區(qū)中,當(dāng)磁盤控制器的緩沖區(qū)被讀滿后,向 DMA 發(fā)起中斷信號(hào),告知自己緩沖區(qū)已滿;
DMA 收到磁盤的信號(hào),將磁盤控制器緩沖區(qū)中的數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū)中,此時(shí)不占用 CPU,CPU 可以執(zhí)行其他任務(wù);
當(dāng) DMA 讀取了足夠多的數(shù)據(jù),就會(huì)發(fā)送中斷信號(hào)給 CPU;
CPU 收到 DMA 的信號(hào),知道數(shù)據(jù)已經(jīng)準(zhǔn)備好,于是將數(shù)據(jù)從內(nèi)核拷貝到用戶空間,系統(tǒng)調(diào)用返回;
Reactor 模式一般翻譯成反應(yīng)器模式,也有人稱為分發(fā)者模式。是基于事件驅(qū)動(dòng)的設(shè)計(jì)模式,擁有一個(gè)或多個(gè)并發(fā)輸入源,有一個(gè)服務(wù)處理器和多個(gè)請(qǐng)求處理器,服務(wù)處理器會(huì)同步的將輸入的請(qǐng)求事件以多路復(fù)用的方式分發(fā)給相應(yīng)的請(qǐng)求處理器。簡(jiǎn)單來(lái)說(shuō)就是 由一個(gè)線程來(lái)接收所有的請(qǐng)求,然后派發(fā)這些請(qǐng)求到相關(guān)的工作線程中
1、單Reactor單線程
2、單Reactor多線程
3、多Reactor多線程
https://juejin.cn/post/7128732976216539167