据我所知,如果他们太忙,goroutines会阻止其他goroutines运行。对我而言,这意味着我的应用程序的性能和响应能力很可能取决于我是否知道哪些库方法可以控制其他例程(例如,通常为Read()和Write())golang方法将产生goroutines
有什么办法可以确切地知道不同的库方法如何控制其他goroutines,即不实际阻止?
有没有什么办法可以实现一个调用第三方代码的新方法(包括像findnextchangenotification这样的依赖于waitforsingleobject或waitformultipleobjects的异步Win32 API)并且在Go调度程序中表现“很好”?在这个特定的例子中,系统调用一旦完成就会发出信号,我需要等到它完成并不耗尽所有其他goroutines。
对于如何处理Go中的第三方阻塞操作,使其不会耗尽其他例程,或许还有另一种“最佳实践”?
我假设Go运行时可能有某种内部运行在后台线程上的IO循环,以便“暂停”阻塞goroutine操作,直到它们完成IO。如果确实如此,那么我认为能够在此基础上进行新的阻塞操作会很有用。
谢谢您的答复。我关心的不是如何让它发挥作用,而是如何使它尽可能好。在我看来,必须有某种内部事件通知循环,并将其与我自己的阻塞呼叫连接起来似乎是确保良好性能和调度的最佳方式。 – agnsaft
我修改了我的答案。 – thwd