2 回答

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