我對coroutines in Tornado的基本理解是,它們應該可以幫助擴展API服務器,尤其是在處理併發請求方面,每個請求都需要花費大量時間才能完成。然而,在一個簡單的負載測試中,似乎使用協程實際上比使用簡單的阻塞函數調用更糟糕......龍捲風表現更差與協程與沒有?
下面是使用負載測試併發級別爲4的API響應時間的兩個屏幕截圖(即, 4蝗蟲或「用戶」)。/v1端點使用簡單的阻止函數調用,而/ v2端點使用tornado.gen.coroutine
。我預計GET/v2/info的平均響應時間將明顯低於GET/v1/info的平均響應時間,但實際上平均響應時間實際上是更高的。
我覺得我現在不是做錯了什麼或誤解的一個基本概念。有人可以告訴我爲什麼我的示例項目顯示上述數字?在併發負載下,基於協程的API性能會比簡單的API差嗎?
樣品tornado-loadtest
項目:https://github.com/martyychang/tornado-loadtest
感謝您的信息,本。所以,如果我正確理解你的答案:如果不是做內存計算,那麼緩慢的操作是從互聯網上下載一個大型的文件,那麼協程可能會有用嗎? –
是的,沒錯。 –