1 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
這里有一個(gè)根本性的誤解。線程只能執(zhí)行兩項(xiàng)操作:
線程可以阻塞,等待某些東西。
線程可以使用 CPU 運(yùn)行。
如果線程從不阻塞,則它使用 100% 的可用 CPU。不能使非阻塞代碼使用的 CPU 少于 100%。
您有三種選擇:
使用非阻塞代碼,并接受 100% 的 CPU 使用率。
重新設(shè)計(jì),使其使用通道,并且可以放在塊內(nèi)。checkSomthingIsTrue()select
for {
select {
case <-ctx.Done():
return true
case <-whenSomethingIsTrue():
if err := doSomthing(); err != nil {
continue
}
}
}
使用超時(shí)來(lái)限制循環(huán),例如:
// Poll every 100ms.
const pollInterval = 100 * time.Millisecond
for {
select {
case <-ctx.Done():
return true
case <-time.After(pollInterval):
if checkSomthingIsTrue() {
if err := doSomthing(); err != nil {
continue
}
}
}
}
另請(qǐng)注意,這毫無(wú)意義,但這是一個(gè)不同的問(wèn)題。continue
- 1 回答
- 0 關(guān)注
- 88 瀏覽
添加回答
舉報(bào)