2 回答

ABOUTYOU
TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個贊
自從使用tornado以后就不再使用django了, tornado也從1.x到了現(xiàn)在3.x
Tornado之所以與眾不同, 是因?yàn)樗潜姸郬SGI框架中的一個特例. 它的異步方式也給了社區(qū)很多啟發(fā), 影響力很大.
單就非阻塞和多線程, 起到的都是"多任務(wù)"那種功能. 不同的是, 多線程把處理器時間按照任務(wù)平分, 非阻塞是按照事件來驅(qū)動多任務(wù), 不會在一個任務(wù)沒有執(zhí)行完的時候打斷(沒有保存變量, 任務(wù)切換這種事情, 當(dāng)然也不需要加鎖)
至于哪個對web開發(fā)更重要? 寫出來的程序功能是一樣的. 如果是異步寫, 代碼會多一點(diǎn), 因?yàn)橛泻芏郼allback, 但是你完全無需處理多線程程序的共享資源問題, 無需數(shù)據(jù)庫連接池.
你需要小心不要寫出CPU占用太高的代碼, 因?yàn)镃PU不是按照時間平均分配給大家的, 如果你的程序處理一件事情需要兩秒鐘, 那么兩個線程的程序可能會同時跑, 總共5秒同時結(jié)束(1秒鐘用在任務(wù)切換).
如果是異步環(huán)境, 那么就是先執(zhí)行一個程序2秒, 然后再執(zhí)行另外一個程序2秒, 總共4.5秒(無需保存環(huán)境, 假設(shè)任務(wù)切換0.5秒)
對于那種CPU消耗極小的等待任務(wù), 比如同步的curl操作(服務(wù)器在等待另外一個服務(wù)器), 這等待的1秒鐘, 使用異步的話tornado已經(jīng)可以處理幾千個其他的http requests, 奇妙的是tornado這個時候還是工作在單線程模式, CPU幾乎完全沒有浪費(fèi).
實(shí)戰(zhàn)中, 其他框架需要在多進(jìn)程prefork模式下開到60-100個進(jìn)程的吞吐能力, tornado可能開1到3個進(jìn)程, 處理能力是類似的. 注意在多進(jìn)程模式下, cpu需要不斷切換60個進(jìn)程的壓力是不小的.
Tornado之所以與眾不同, 是因?yàn)樗潜姸郬SGI框架中的一個特例. 它的異步方式也給了社區(qū)很多啟發(fā), 影響力很大.
單就非阻塞和多線程, 起到的都是"多任務(wù)"那種功能. 不同的是, 多線程把處理器時間按照任務(wù)平分, 非阻塞是按照事件來驅(qū)動多任務(wù), 不會在一個任務(wù)沒有執(zhí)行完的時候打斷(沒有保存變量, 任務(wù)切換這種事情, 當(dāng)然也不需要加鎖)
至于哪個對web開發(fā)更重要? 寫出來的程序功能是一樣的. 如果是異步寫, 代碼會多一點(diǎn), 因?yàn)橛泻芏郼allback, 但是你完全無需處理多線程程序的共享資源問題, 無需數(shù)據(jù)庫連接池.
你需要小心不要寫出CPU占用太高的代碼, 因?yàn)镃PU不是按照時間平均分配給大家的, 如果你的程序處理一件事情需要兩秒鐘, 那么兩個線程的程序可能會同時跑, 總共5秒同時結(jié)束(1秒鐘用在任務(wù)切換).
如果是異步環(huán)境, 那么就是先執(zhí)行一個程序2秒, 然后再執(zhí)行另外一個程序2秒, 總共4.5秒(無需保存環(huán)境, 假設(shè)任務(wù)切換0.5秒)
對于那種CPU消耗極小的等待任務(wù), 比如同步的curl操作(服務(wù)器在等待另外一個服務(wù)器), 這等待的1秒鐘, 使用異步的話tornado已經(jīng)可以處理幾千個其他的http requests, 奇妙的是tornado這個時候還是工作在單線程模式, CPU幾乎完全沒有浪費(fèi).
實(shí)戰(zhàn)中, 其他框架需要在多進(jìn)程prefork模式下開到60-100個進(jìn)程的吞吐能力, tornado可能開1到3個進(jìn)程, 處理能力是類似的. 注意在多進(jìn)程模式下, cpu需要不斷切換60個進(jìn)程的壓力是不小的.
- 2 回答
- 0 關(guān)注
- 1271 瀏覽
添加回答
舉報
0/150
提交
取消