大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 異步非阻塞io詳解

異步非阻塞io詳解

更新時間:2022-08-26 09:59:34 來源:動力節點 瀏覽1049次

Java基礎教程中大家會學到I/O的相關知識,那么,異步非阻塞io是什么?動力節點小編來為大家解答。

異步和非阻塞 I/O

實時 Web 功能需要每個用戶的長期空閑連接。在傳統的同步 Web 服務器中,這意味著為每個用戶分配一個線程,這可能非常昂貴。

為了最小化并發連接的成本,Tornado 使用單線程事件循環。這意味著所有應用程序代碼都應該以異步和非阻塞為目標,因為一次只能激活一個操作。

術語異步和非阻塞密切相關,經?;Q使用,但它們并不完全相同。

阻塞

當一個函數在返回之前等待某事發生時會阻塞。一個函數可能會因為多種原因而阻塞:網絡 I/O、磁盤 I/O、互斥鎖等。事實上,每個函數在運行和使用 CPU 時都會阻塞,至少有一點點阻塞(舉一個極端的例子來演示為什么 CPU 阻塞必須像其他類型的阻塞一樣受到重視,請考慮密碼散列函數,如 bcrypt,其設計使用數百毫秒的 CPU 時間,遠遠超過典型的網絡或磁盤訪問)。

一個函數在某些方面可以是阻塞的,而在其他方面可以是非阻塞的。在 Tornado 的上下文中,我們通常在網絡 I/O 的上下文中討論阻塞,盡管所有類型的阻塞都將被最小化。

異步

異步函數在完成之前返回,并且通常會在觸發應用程序中的某些未來操作之前在后臺發生一些工作(與正常的 同步函數相反,它們會在返回之前完成它們將要做的所有事情)。異步接口有多種風格:

回調參數

返回占位符 ( Future, Promise, Deferred)

交付到隊列

回調注冊表(例如 POSIX 信號)

無論使用哪種類型的接口, 根據定義,異步函數與其調用者的交互方式不同;沒有免費的方法可以以對其調用者透明的方式使同步函數異步(像gevent這樣的系統使用輕量級線程來提供與異步系統相當的性能,但它們實際上并沒有使事情異步)。

Tornado 中的異步操作通常返回占位符對象 ( Futures),但一些低級組件(例如IOLoop使用回調的組件)除外。Futures通常使用awaitoryield 關鍵字轉換成它們的結果。

例子

這是一個示例同步函數:

from tornado.httpclient import HTTPClient
def synchronous_fetch(url):
    http_client = HTTPClient()
    response = http_client.fetch(url)
    return response.body

這是作為原生協程異步重寫的相同函數:

from tornado.httpclient import AsyncHTTPClient
async def asynchronous_fetch(url):
    http_client = AsyncHTTPClient()
    response = await http_client.fetch(url)
    return response.body

或者為了與舊版本的 Python 兼容,請使用以下tornado.gen模塊:

from tornado.httpclient import AsyncHTTPClient
from tornado import gen
@gen.coroutine
def async_fetch_gen(url):
    http_client = AsyncHTTPClient()
    response = yield http_client.fetch(url)
    raise gen.Return(response.body)

協程有點神奇,但它們在內部做的事情是這樣的:

from tornado.concurrent import Future
def async_fetch_manual(url):
    http_client = AsyncHTTPClient()
    my_future = Future()
    fetch_future = http_client.fetch(url)
    def on_fetch(f):
        my_future.set_result(f.result().body)
    fetch_future.add_done_callback(on_fetch)
    return my_future

請注意,協程Future在 fetch 完成之前返回它。這就是使協程異步的原因。

任何你可以用協程做的事情,你也可以通過傳遞回調對象來做,但是協程提供了一個重要的簡化,它讓你以與同步時相同的方式組織你的代碼。這對于錯誤處理尤其重要,因為try/except塊的工作方式與您在協程中所期望的一樣,而這很難通過回調實現。如果大家對此比較感興趣,想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程內容由淺到深,細致全面,適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产福利免费在线观看 | 12至16末成年毛片视频 | 日本精品视频一视频高清 | 国产一级特黄高清免费大片 | 男女很黄很色床视频网站免 | 国产精品久久成人影院 | 亚洲三级久久 | 女人十六毛片 | 亚洲国产精品毛片∧v卡在线 | 日本中文字幕在线精品 | 男女羞羞免费视频 | 日韩一级视频免费观看 | 欧美日本免费观看αv片 | 久久在线观看免费视频 | 国产亚洲精品中文带字幕21页 | 一区二三区国产 | 91中文字幕在线视频 | 2020亚洲欧美日韩在线观看 | 美美女高清毛片视频黄的一免费 | 国产成人一区二区三中文 | 亚洲人体视频 | 久草视频在线免费播放 | 欧美日韩亚洲无线码在线观看 | 2019国产精品视频 | 久久最近最新中文字幕大全 | 亚洲天堂h| 精品一区二区日本高清 | 一级特黄aa大片欧美小说 | 国产一级淫片a | 无遮挡无遮挡91桃色在线观看 | 91蝌蚪在线播放 | 久久精品中文字幕首页 | 日韩在线观看一区 | 欧美成人精品一区二三区在线观看 | 欧美一级α片毛片免费观看 | 成人a毛片手机免费播放 | 欧美乱大交xxxxxx喷潮免费 | 亚洲视频 在线观看 | 国产网红自拍 | 国产爱视频 | 手机看片一区 |