1_Tornado簡介

Tornado

Tornado是一個Python Web框架和異步網絡庫,最初是在FriendFeed開發的。通過使用非阻塞網絡I /O,Tornado可以擴展到數以萬計的開放連接,非常適合 長時間輪詢, WebSockets和其他需要與每個用戶建立長期連接的應用程序。

Tornado 和現在的主流 Web 服務器框架(包括大多數 Python 的框架)有着明顯的區別:它是非阻塞式服務器,而且速度相當快。得利於其 非阻塞的方式和對 epoll的運用,Tornado 每秒可以處理數以千計的連接,因此 Tornado 是實時 Web 服務的一個 理想框架。我們開發這個 Web 服務器的主要目的就是爲了處理 FriendFeed 的實時功能 ——在 FriendFeed 的應用裏每一個活動用戶都會保持着一個服務器連接。

Tornado和Django的區別

Django
  • 注重高效開發
  • 全自動化的管理後臺(只需要使用起ORM,做簡單的定義,就能自動生成數據庫結構,全功能的管理後臺)
  • session功能
Tornado
  • 注重性能優越,速度快
  • 解決高併發
  • 異步非阻塞
  • websockets 長連接
  • 內嵌了HTTP服務器
  • 單線程的異步網絡程序,默認啓動時根據CPU數量運行多個實例;利用CPU多核的優勢。

Epoll

IO多路複用除了select,還有兩種方式,poll 和 epoll

在windows下只支持select,而在linux中,這三個都有。epoll是性能最好的,select唯一的優點是多平臺都可以用,但是缺點也很明顯,就是效率很差。poll是epoll和select的中間過渡,與select相比,poll可以監聽的數量沒有限制。epoll沒有最大連接上限,另外監聽機制也完全發生變化,select的機制是輪詢(每個數據都檢查一遍,即使找到有變化的也會繼續檢查),epoll的機制是用回調函數,哪個對象有變化,那個就調用這個回調函數

在select/poll時代,服務器進程每次都把這100萬個連接告訴操作系統(從用戶態複製句柄數據結構到內核態),讓操作系統內核去查詢這些套接字上是否有事件發生,輪詢完後,再將句柄數據複製到用戶態,讓服務器應用程序輪詢處理已發生的網絡事件,這一過程資源消耗較大,因此,select/poll一般只能處理幾千的併發連接。

epoll的設計和實現與select完全不同。epoll通過在Linux內核中申請一個簡易的文件系統(文件系統一般用什麼數據結構實現?B+樹)。把原先的select/poll調用分成了3個部分:

1)調用epoll_create()建立一個epoll對象(在epoll文件系統中爲這個句柄對象分配資源)

2)調用epoll_ctl向epoll對象中添加這100萬個連接的套接字

3)調用epoll_wait收集發生的事件的連接

如此一來,要實現上面說是的場景,只需要在進程啓動時建立一個epoll對象,然後在需要的時候向這個epoll對象中添加或者刪除連接。同時,epoll_wait的效率也非常高,因爲調用epoll_wait時,並沒有一股腦的向操作系統複製這100萬個連接的句柄數據,內核也不需要去遍歷全部的連接。

Epoll模型參考網址:http://blog.csdn.net/shenya1314/article/details/73691088

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章