【发布时间】:2013-11-27 16:53:30
【问题描述】:
我有一个非常基本的问题。如果一个线程忙于 IO 操作,为什么不认为它处于 RUNNING 状态?如果 IO 操作需要很长时间,则意味着线程正在执行它的工作。一个线程在实际工作时如何被称为 BLOCKED?
【问题讨论】:
-
它没有做任何工作,它没有在内核上运行,它没有使用 CPU,所以考虑它'RUNNING'并不完全合适!
-
也许您将线程上下文中的“阻塞”一词与含义有所不同的“阻塞 I/O 操作”混淆了。
-
用户线程(通常)不直接执行 I/O 操作。他们要求操作系统执行并阻止直到完成。驱动程序执行实际的 I/O,并在操作完成时向用户线程发出信号以再次运行。
标签: java multithreading