我的理解是,如果阻塞的庫調用,非阻塞的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