为什么"Multiplexed, non-blocking I/O, [..] much more scalable than thread-oriented, blocking I/O"?



我在JDK 7文档中读到了有关Channels的内容(此处),偶然发现了以下内容:

多路复用、无阻塞I/O,比面向线程、阻塞I/O更具可扩展性,〔…〕

为什么会这样,有一个简单的解释吗?

因为线程堆栈通常比支持异步I/O连接所需的数据结构大得多。此外,调度数千个线程也是低效的。

"阻塞"意味着线程必须等待资源可用所需的时间。。。这意味着,根据定义,线程将坐在那里等待资源。非阻塞避免了这种事情。

通常,非阻塞解决方案更为棘手,但它们避免了资源争用,从而更容易扩展。(也就是说,Channel的目的是让这件事不那么棘手。)

相关内容

最新更新