我的主要背景是JVM,并且对OS线程有较高的了解。我知道,一旦执行某种IO操作,当前线程就会被挂起并在操作完成后被激活。我不知道的是系统如何知道何时激活给定线程。这里有几个问题可以简化回答:
可能有哪些线程挂起原因?我知道线程可以等待网络数据包或通过stdin的用户输入或硬盘中的数据。还有更多吗?是否为系统级别的人员提供统一的API?等待其他线程如何适应这种情况?
系统如何知道给定线程已准备好被激活?是基于推还是拉机制?
同步与异步api如何适应这一要求?我知道例如jdbc本质上是同步的,而Apache async http客户端是异步的。我也知道,将某些操作包装到单独的线程中并不能使其真正地异步。您是否需要与某些特定的系统api集成以使事情真正异步?
假设我们仅在谈论Linux。 感觉好像我缺少有关系统级编程的大量知识。我想了解执行阻塞操作时会发生什么。