Golang Go语言中在 routine 中执行阻塞任务可以实现吗?
Golang Go语言中在 routine 中执行阻塞任务可以实现吗?
golang 新手请教下在协程中执行死循环任务并调度是否可以实现,没找到太多相关样例
什么意思,for{ // XXX} 不行吗。
更多关于Golang Go语言中在 routine 中执行阻塞任务可以实现吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
解码服务要一直执行,
相当于一个协程一路解码,
肯定会阻塞协程,
刚刚试了几个实现都没成功
可以多点上下文吧。再什么场景下,要做什么,达成什么样的效果。
sync.waitgroup
不太理解楼主是要什么效果,但是 context 和楼上的 waitgroup 你可以了解下
前者可以实现轮询调度
https://paste.ubuntu.com/p/thsKMhWC2x/
后者 gocv 不支持
https://paste.ubuntu.com/p/3F3wvYqGDM/
这样?
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中执行阻塞任务时,需要注意以下几点:
-
资源使用:阻塞的goroutine会占用系统资源(如内存和goroutine调度资源),因此应尽量避免大量goroutine长时间阻塞。
-
上下文管理:对于可能长时间阻塞的任务,考虑使用上下文(context.Context)来管理任务的超时和取消,以便在必要时释放资源或中断阻塞操作。
-
错误处理:确保妥善处理阻塞任务中的错误,避免程序崩溃或资源泄露。
-
性能监控:对于涉及大量阻塞操作的程序,应定期监控性能,确保系统资源得到有效利用。
总之,虽然goroutine可以执行阻塞任务,但开发者需要谨慎处理,以确保程序的稳定性、性能和资源利用率。在实际开发中,应根据具体需求选择合适的并发模式,并充分考虑错误处理、资源管理和性能优化等方面。