我在网上搜索了一些关于阻塞 I/O 和非阻塞 I/O 的技术细节,发现有几个人声称非阻塞 I/O 比阻塞 I/O 更快,例如在 这份文件中。
如果我使用阻塞 I/O,那么当前被阻塞的线程当然不能做任何其他事情... 因为它被阻塞了。但是,一旦一个线程开始被阻塞,操作系统可以切换到另一个线程,而不切换回来,直到有一些事情要做的阻塞线程。因此,只要系统上还有另一个线程需要 CPU 并且没有被阻塞,那么与基于事件的非阻塞方法相比,就不应该有更多的 CPU 空闲时间,不是吗?
除了减少 CPU 的空闲时间外,我还看到了一个增加计算机在给定时间框架内可以执行的任务数量的选项: 减少切换线程所带来的开销。但如何才能做到这一点呢?开销是否足够大,以显示可测量的影响?这里有一个关于我如何描绘它工作的想法:
是这样吗?如果没有,它是如何工作的?这意味着事件系统可以在不需要显式触及堆栈的情况下工作(例如,一个真正的调度程序需要备份堆栈,并在切换线程时将另一个线程的堆栈复制到内存中) ?这到底能节省多少时间?还有别的吗?