Golang Go语言中在 routine 中执行阻塞任务可以实现吗?

发布于 1周前 作者 itying888 来自 Go语言

Golang Go语言中在 routine 中执行阻塞任务可以实现吗?
golang 新手请教下在协程中执行死循环任务并调度是否可以实现,没找到太多相关样例

15 回复

什么意思,for{ // XXX} 不行吗。

更多关于Golang Go语言中在 routine 中执行阻塞任务可以实现吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html



解码服务要一直执行,
相当于一个协程一路解码,
肯定会阻塞协程,
刚刚试了几个实现都没成功

可以多点上下文吧。再什么场景下,要做什么,达成什么样的效果。

sync.waitgroup

不太理解楼主是要什么效果,但是 context 和楼上的 waitgroup 你可以了解下

这样?


ch := make(chan, int)

go func() {

for i:=0;i<10;i++{
ch<-i
time.Sleep(i500time.Millisecond)
}

}()

for {
fmt.Print(<-ch)
}

好的 我试试

看样子是 openCV 的问题,可以写成命令行

cap rtsp://xxx1
cap rtsp://xxx2
cap rtsp://xxx3

这样都是独立的进程,应该就没问题了

defer wg.Done() 加到第七行前面,wg.Done 应该要在 goroutine 结束后执行吧。

gocv 线程不安全 这个方法我觉得可以放弃了
阻塞可以直接放弃 Done 了吧

打个日志看看你真实代码传入的 url 列表?感觉运行的时候是个空列表?

gocv 有示例代码,复制粘贴就好了

多视频源,就需要启动多个进程

在Golang(Go语言)中,确实可以在goroutine中执行阻塞任务。Goroutine是Go语言并发编程的基本单位,它允许你并发地执行函数或方法。尽管goroutine通常用于非阻塞或I/O密集型任务,以最大化并发性和资源利用率,但在某些情况下,你确实需要在goroutine中执行阻塞任务,比如等待外部资源、调用阻塞API等。

在goroutine中执行阻塞任务时,需要注意以下几点:

  1. 资源使用:阻塞的goroutine会占用系统资源(如内存和goroutine调度资源),因此应尽量避免大量goroutine长时间阻塞。

  2. 上下文管理:对于可能长时间阻塞的任务,考虑使用上下文(context.Context)来管理任务的超时和取消,以便在必要时释放资源或中断阻塞操作。

  3. 错误处理:确保妥善处理阻塞任务中的错误,避免程序崩溃或资源泄露。

  4. 性能监控:对于涉及大量阻塞操作的程序,应定期监控性能,确保系统资源得到有效利用。

总之,虽然goroutine可以执行阻塞任务,但开发者需要谨慎处理,以确保程序的稳定性、性能和资源利用率。在实际开发中,应根据具体需求选择合适的并发模式,并充分考虑错误处理、资源管理和性能优化等方面。

回到顶部