我只是想明白,如果當我調用time.sleep(x)時,運行代碼的當前線程會延遲x秒。但是,這是否釋放了處理器的這些x秒或者線程是否將資源保留給自己,並且在x秒後它纔開始執行下一行代碼。time.sleep()函數
與我對着確切的情況編輯:
這裏的情況跟我說:
class SomeHandler(tornado.websocket.WebSocketHandler)
@tornado.gen.coroutine
def something_async():
time.sleep(5)
return result
def on_message(message):
future = yield something_async(message)
if __name__ == '__main__':
application = tornado.web.Application([
(r'/', SomeHandler),
])
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
現在,因爲這場龍捲風將是一個單線程的服務器,究竟做time.sleep(5)在這種情況下(它會阻塞線程5秒使整個進程同步)還是協程會產生一個新的線程?
對CPU進行處理並阻止任何其他線程執行有意義嗎?有沒有可能找到一種方法? –
也許這可以幫助你:http://stackoverflow.com/questions/92928/time-sleep-sleeps-thread-or-process – Querenker
簡單的答案是,它將釋放處理器,但實現可能會有所不同。有一種稱爲*旋轉鎖定的功能*,如果等待時間很短,線程將保留CPU。可以想象,一個實現可以使用自旋鎖來實現短暫的睡眠時間,特別是在專門爲此提供API的Windows上。另見http://stackoverflow.com/questions/7273474/behavior-of-pythons-time-sleep0-under-linux-does-it-cause-a-context-switch和http://stackoverflow.com/questions/ 22115831/how-to-resolve-spinlock-issues-with-multithreaded-python – cdarke