1.1 tornado是什么
tornado 是使用python編寫的一個強大的氢卡,可以擴展的web服務(wù)器 在處理嚴(yán)峻的網(wǎng)絡(luò)流量的時候炭剪,表現(xiàn)出足夠的健壯靡菇,編寫創(chuàng)建的時候足夠的輕量級鸽斟,能夠用在大量的應(yīng)用和工具中 不同于最多只能達到10000個并發(fā)連接的傳統(tǒng)的網(wǎng)絡(luò)服務(wù)器挚冤,tornado設(shè)計之初旨在解決c10K問題,是一個非常高性能的框架 它擁有處理安全性庶近,用戶驗證翁脆,社交網(wǎng)絡(luò)和外部服務(wù)(數(shù)據(jù)庫,網(wǎng)站api)進行交互的工具
C10K問題
傳統(tǒng)的apache
基于線程的服務(wù)器拦盹,如apache鹃祖, 為了傳入的連接溪椎,維護了一個操作系統(tǒng)的線程池普舆, apache會為每個http連接分配線程池中的同一個線程恬口, 如果所有的線程都處于被占用的狀態(tài)并且尚有內(nèi)存可以使用,則生成一個新的線程 不同的操作系統(tǒng)會有不同的設(shè)置沼侣,大多的系統(tǒng)中默認(rèn)的線程堆的大小是8mb apache的架構(gòu)在大負(fù)載下變得不可預(yù)測祖能, 為每個打開的連接維護一個大的線程池等待數(shù)據(jù),會迅速耗光服務(wù)器的內(nèi)存資源
tornado
大多數(shù)的設(shè)計網(wǎng)絡(luò)應(yīng)用都會展示實時更新來提醒新消息蛾洛,狀態(tài)變化以及用戶通知 要求客戶端需要保持一個打開的連接來等待服務(wù)器的任何響應(yīng)养铸, 這些長連接或者推送的請求使得apache的最大線程池迅速飽和 一旦線程池的資源耗盡,服務(wù)器將不再響應(yīng)新的請求 異步服務(wù)器在這一場景中的應(yīng)用相對較新 它們正是被設(shè)計來減輕基于線程的服務(wù)器的限制的 當(dāng)負(fù)載增加時候轧膘,諸如node.js,lighttpd,tornodo這樣的服務(wù)器使用協(xié)作的多任務(wù)的方式進行優(yōu)雅的擴展 如果當(dāng)前的請求正在等待來自其他資源的數(shù)據(jù)(數(shù)據(jù)庫查詢或者http請求)钞螟,一個異步服務(wù)器可以明確地控制,掛起請求 異步服務(wù)器用來恢復(fù)暫停的操作的一個常見的模式:當(dāng)合適的數(shù)據(jù)準(zhǔn)備好時候谎碍,調(diào)用回調(diào)函數(shù)