我的理解是,如果阻塞的庫調用,非阻塞的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. Golang非阻塞緩衝
- 2. 圖書館項目需要proguard.cfg嗎?
- 3. 圖書館的財產,org.zkoss.zul.chart.engine.class,需要
- 4. mpi:阻塞與非阻塞
- 5. Golang併發性和單通道阻塞,需要說明
- 6. 從Google圖書館加載時需要加載jsapi嗎?
- 7. 我如何要求圖書館比Play所需的圖書館更新!框架?
- 8. 非阻塞stdio
- 9. 非阻塞django?
- 10. 非阻塞pthread_join
- 11. 非阻塞spmd
- 12. PyGTK非阻塞
- 13. Javascript非阻塞
- 14. 我爲什麼要使用非阻塞或阻塞套接字?
- 15. 谷歌關閉圖書館受阻
- 16. 帶延遲的阻塞/非阻塞
- 17. 嵌套Socket阻塞非阻塞SocketHi
- 18. 非阻塞PASV襪子和阻塞
- 19. 是renderer.render()阻塞還是非阻塞?
- 20. 非阻塞寫入和阻塞recv
- 21. Maven - 你需要一個主要的項目來作爲一個圖書館嗎?
- 22. node.js中的非阻塞需求
- 23. 圖書館對圖書館的引用
- 24. SQLAlchemy可以配置爲非阻塞嗎?
- 25. Dialog.show()是一種非阻塞方法嗎?
- 26. 非阻塞PostgreSQL ORM
- 27. 使Javascript非阻塞
- 28. 非阻塞等待
- 29. jQuery each()非阻塞?
- 30. 非阻塞的PipedStreams?
因此,如果一個goroutine被阻塞,它不會阻塞整個線程(它與其他goroutines共享)?如果是這種情況,那麼你唯一需要編寫回調代碼的時候是當你想要這個特定的goroutine繼續,而不是切換到另一個時(我猜測這很罕見)? – tldr
你不使用回調。你會把這個「阻塞的東西」放在一個單獨的goroutine中,然後用它來通道,以便在完成時「回話」。 –
@尼克你的三重否定很難理解,請澄清。 (「沒有圖書館...」) – thwd