我的理解是,如果阻塞的库调用,非阻塞的Web服务器(node.js,eventmachine,tornado)可能会停下来。这对于Golang也是如此吗?如果一个goroutine被阻塞,是另一个自动给予CPU的访问权限,还是需要等待阻塞的goroutine'yield'?如果是前者,那么图书馆不需要非阻塞,是吗?我问,因为我没有看到任何明确声明它们是非阻塞的Redis/Mongo库。Golang - 图书馆需要非阻塞吗?
2
A
回答
7
我的理解是,非阻断的Web服务器(node.js的, EventMachine的,龙卷风)可以运转了,如果他们作出一个 堵库的调用。这对于Golang也是如此吗?
不,它不是。 Go例程将在IO上产生,或者运行时将根据需要创建新的OS线程。
如果一个够程被封锁,是一个又一个自动获得 访问CPU
是的,它就是 - 去程序上的任何类型的IO或信道通信的产生。
还是他们不得不等待被封锁的goroutine'屈服'?
不,他们没有。
如果是前者,那么库不需要是非阻塞的,他们做 呢?我问,因为我没有看到任何明确声明它们是非阻塞的Redis/Mongo库。
没有库(或一般的Go代码)不需要是非阻塞的,这使得它们更容易编写和维护。在我看来,这是Go的主要优点。运行时不需要运行1000个例程,而只需编写简单的命令式代码。
相关问题
- 1. 图书馆项目需要proguard.cfg吗?
- 2. Golang非阻塞缓冲
- 3. 图书馆的财产,org.zkoss.zul.chart.engine.class,需要
- 4. mpi:阻塞与非阻塞
- 5. Golang并发性和单通道阻塞,需要说明
- 6. 从Google图书馆加载时需要加载jsapi吗?
- 7. 我如何要求图书馆比Play所需的图书馆更新!框架?
- 8. SQLCipher图书馆为自己的图书馆(需要与“资产”文件夹)
- 9. 非阻塞django?
- 10. 非阻塞setTimeout
- 11. 非阻塞spmd
- 12. 非阻塞pthread_join
- 13. PyGTK非阻塞
- 14. Javascript非阻塞
- 15. 非阻塞stdio
- 16. 我为什么要使用非阻塞或阻塞套接字?
- 17. 谷歌关闭图书馆受阻
- 18. 带延迟的阻塞/非阻塞
- 19. 嵌套Socket阻塞非阻塞SocketHi
- 20. 非阻塞PASV袜子和阻塞
- 21. 是renderer.render()阻塞还是非阻塞?
- 22. 非阻塞写入和阻塞recv
- 23. Maven - 你需要一个主要的项目来作为一个图书馆吗?
- 24. node.js中的非阻塞需求
- 25. 图书馆对图书馆的引用
- 26. Dialog.show()是一种非阻塞方法吗?
- 27. SQLAlchemy可以配置为非阻塞吗?
- 28. 当需要HTTP响应时,Akka非阻塞选项
- 29. MPI_wait何时需要使用非阻塞呼叫?
- 30. 需要关于如何做向导功能异步/非阻塞
因此,如果一个goroutine被阻塞,它不会阻塞整个线程(它与其他goroutines共享)?如果是这种情况,那么你唯一需要编写回调代码的时候是当你想要这个特定的goroutine继续,而不是切换到另一个时(我猜测这很罕见)? – tldr
你不使用回调。你会把这个“阻塞的东西”放在一个单独的goroutine中,然后用它来通道,以便在完成时“回话”。 –
@尼克你的三重否定很难理解,请澄清。 (“没有图书馆...”) – thwd