【发布时间】:2019-10-18 23:14:21
【问题描述】:
我试图了解线程在等待来自远程服务器的 http 响应时会发生什么。
假设在某个时间点有 n 个进程正在运行。基于其线程调度算法的操作系统将尝试运行每个线程(比方说循环方式)。假设有一个线程发起了一个 http 请求并等待来自远程服务器的响应。这个线程会继续打开 cpu 核心吗?还是有一些interrupt 类型的机制会通知线程是否准备好运行?如果存在中断类机制,那么使用asynchronous programming 有什么好处?至少从 CPU 利用率的角度来看。
上面的东西是否依赖于语言?如果是,java vs nodejs vs python有什么区别......
【问题讨论】:
-
操作系统不会调度等待事件(IO 或信号)的线程。那将是浪费时间,线程将立即重新进入睡眠状态。 CPU 对异步编程一无所知,对于一开始就试图避免线程的语言来说,这是一个高级概念。异步编程就像使用协作多任务或 yield 系统调用。只需使用语法糖来隐藏实现调度程序的技术细节。 CPU 响应中断以获取事件通知,事件是异步编程的低级块。
-
@MargaretBloom 所以从 CPU 的角度来看,使用异步编程并没有太大的好处吗?
-
如果通过异步编程您指的是您发布的链接,那么答案是从 CPU 的角度来看,没有异步编程之类的东西。然而,这些异步库是在操作系统“异步”API(基于回调或事件)之上实现的,因此比阻塞线程并将其调度出来更有效。
标签: multithreading cpu cpu-usage core