gpt4 book ai didi

go - 长时间运行的 cgo 函数调用超时

转载 作者:数据小太阳 更新时间:2023-10-29 03:11:26 25 4
gpt4 key购买 nike

我目前正在开发一个程序,该程序使用带有 cgo 的 c 库调用长时间运行的函数。我无法使用 c 编辑库以允许超时。到目前为止,我唯一的解决方案是让僵尸 goroutine 继续运行

func Timeout(timeout time.Duration, runFunc func()) bool {
var wg = new(sync.WaitGroup)
c := make(chan interface{})
wg.Add(1)
go func() {
defer close(c)
wg.Wait()
}()
go func() {
runFunc()
c <- nil
wg.Done()
}()
select {
case <-c:
return false
case <-time.After(timeout):
return true
}
}

长时间运行的功能可以正常工作,但这是针对长时间运行的服务器,随着时间的推移可能会导致大量内存泄漏/浪费 CPU 周期。

最佳答案

中断cgo函数调用只有两种方式。

  1. 保持 goroutine 运行但停止等待/阻塞,如上所示

  2. 将 cgo 调用背后的所有逻辑放在单独的可执行文件中,并在子进程中调用它。

关于go - 长时间运行的 cgo 函数调用超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50731055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com