时长:大小11.77M
作者回复: 这个比喻非常赞👍
作者回复: 感谢你的建议!
作者回复: 我们还是需要一个例子能让大家理解异步网络传输的。
作者回复: 方法在阻塞时,你要区分它的线程状态,如果是你说的等待锁,那线程的状态是waiting,是不会申请cpu时间片的,那就不会上下文切换。
如果是这个方法呢:
void blockMethod() {
while(....) {doSomeThing();}
}
对于这个调用者看来,也是阻塞在这个调用这个blockMethod方法上了,但是线程是RUNNING状态,这个时候肯定是要申请CPU时间片的。
Selector.select()在阻塞时,它的内部实现根据操作系统和epoll的配置不同,实际上有好几种实现,不同的实现行为也不一样。
作者回复: Selector本身是阻塞的,但它只需要阻塞一个线程,就可以等待多个socket连接,任何一个连接有数据进来就会解除阻塞。这就是所谓的“多路复用”。
作者回复: 放心,我们这门课使用的任何语言都不会特别深入,更多的是讲实现原理,语言只是讲解和举例的载体。
作者回复: 你说的这个问题是有可能出现的。
作者回复: 其实这些语言中,它们的很多基础类库实现的原理都是一样的。
作者回复: 严格来说,是这样的。
作者回复: 我们这节课和接下来的几节课讲的都是实现消息队列必须的一些技术,同学应该重点来理解我们讲解的原理,但是要真正掌握这些原理,还是需要依托与某一个语言或者框架来实际操作一下的。