据我所知,如果goroutine太忙,它将阻塞其他goroutine运行。对我来说,这意味着我的应用程序的性能和响应能力可能取决于我知道哪些库方法将控制权转移给其他goroutine(例如通常是Read()和Write())。
是否有办法确切地知道不同库方法如何将控制权转移到其他goroutine,即不会实际阻塞?
是否有办法实现调用第三方代码的新方法(包括依赖waitforsingleobject或waitformultipleobjects的异步Win32 API,例如findnextchangenotification),并与Go调度程序“友好”地交互?在这个特定的例子中,系统调用将在完成后发出信号,我需要等待它完成而不会耗尽所有其他goroutine。
在Go中,处理第三方阻塞操作的另一种“最佳实践”方式是否存在,以使它们不会耗尽其他goroutine?
我认为,Go运行时可能内部运行一个IO循环在后台线程上,以便“暂停”阻塞的goroutine操作直到它们完成IO。如果的确如此,那么我想能够基于此构建新的阻塞操作将会非常有用。
是否有办法确切地知道不同库方法如何将控制权转移到其他goroutine,即不会实际阻塞?
是否有办法实现调用第三方代码的新方法(包括依赖waitforsingleobject或waitformultipleobjects的异步Win32 API,例如findnextchangenotification),并与Go调度程序“友好”地交互?在这个特定的例子中,系统调用将在完成后发出信号,我需要等待它完成而不会耗尽所有其他goroutine。
在Go中,处理第三方阻塞操作的另一种“最佳实践”方式是否存在,以使它们不会耗尽其他goroutine?
我认为,Go运行时可能内部运行一个IO循环在后台线程上,以便“暂停”阻塞的goroutine操作直到它们完成IO。如果的确如此,那么我想能够基于此构建新的阻塞操作将会非常有用。