第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

goroutine 上的 IO 回調(diào)

goroutine 上的 IO 回調(diào)

Go
回首憶惘然 2022-06-13 10:15:06
我是golang的初學(xué)者。查看所有 golang 教程,看起來您應(yīng)該為所有內(nèi)容創(chuàng)建 goroutine。來自 C 中的 libuv 之類的東西,您可以在其中為單個線程上的套接字讀/寫定義回調(diào),這是在 golang 中為所需的任何 IO 任務(wù)創(chuàng)建嵌套 goroutine 的正確方法嗎?舉個例子,像 nginx 這樣一個線程將處理多個連接。要在 golang 中做類似的事情,我們需要一個 goroutine 來處理每個連接嗎?
查看完整描述

1 回答

?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個贊

Go 在編寫網(wǎng)絡(luò)服務(wù)的工具領(lǐng)域特別突出,因?yàn)樗谶\(yùn)行時調(diào)度程序中集成了 I/O 感知功能,為任何正在運(yùn)行的 GO 程序提供支持。

基本思想大致是這樣的:goroutine 在套接字上執(zhí)行正常的、順序的、無回調(diào)的操作——即普通的讀取和普通的寫入——并且只要下一個 I/O 操作阻塞(是的,相關(guān)的系統(tǒng)調(diào)用在類 Unix 內(nèi)核返回EWOULDBLOCK) 時,goroutine 被掛起,它的套接字被分發(fā)到運(yùn)行時的一個名為“netpoller”的組件中,該組件是使用平臺原生套接字 I/O 多路復(fù)用器(例如 IOCP 或 IOCP)實(shí)現(xiàn)的epoll,kqueue并且goroutine 正在運(yùn)行的操作系統(tǒng)線程被移交給另一個想要運(yùn)行的 goroutine。一旦 netpoller 發(fā)出信號,套接字上的 I/O 導(dǎo)致 goroutine 暫??梢岳^續(xù),調(diào)度程序?qū)⒃?goroutine 排隊(duì)等待執(zhí)行,然后它繼續(xù)在它停止的地方運(yùn)行。

正因?yàn)槿绱?,?Go 中編寫網(wǎng)絡(luò)服務(wù)時采用的常用模型是每個套接字有一個 goroutine。當(dāng)您編寫普通的 TCP 服務(wù)器時,您應(yīng)該自己創(chuàng)建一個 goroutine(并在它接受客戶端連接后將偵聽器返回的套接字交給它)。
net/http.Server內(nèi)置了這種行為,因?yàn)樗鼊?chuàng)建了一個 goroutine 來服務(wù)每個傳入的客戶端請求(實(shí)際上,對于 HTTP/1.x,每個連接創(chuàng)建兩個甚至三個 goroutine,但它對 HTTP 請求處理程序是不可見的)。

現(xiàn)在,我們剛剛介紹了基礎(chǔ)知識。當(dāng)然,可能有正當(dāng)理由需要額外的 goroutine 來處理完成請求所需執(zhí)行的任務(wù),這就是 @Volker 所指的。


查看完整回答
反對 回復(fù) 2022-06-13
  • 1 回答
  • 0 關(guān)注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號