我有一个非常具体的问题。
答案 0 :(得分:2)
如何阻止I / O操作,例如recvfrom()调用工作 多线程应用程序?
线程被阻止,其他线程继续被安排。这是开发多线程应用程序的主要优势之一,即使在单核机器上也是如此。
操作系统如何安排具有阻塞系统调用的线程?
不是,直到系统调用返回。
当执行阻塞系统调用时,操作系统是否会调度线程(例如,类似于忙等待?),或者一旦系统调用返回,操作系统是否只调度线程?
首先,线程应该在系统调用中做什么?
一般来说,后者也可能,但至少可以说是调度的一个非常奇怪的实现。实际上,假设您是调度程序,因此您目前处于内核空间。线程的执行当前在用户空间中不,因为它等待系统调用返回。那么线程在哪里继续"执行?
这是否会导致执行线程的中断(如果是这种情况,是否值得在互斥或某种原子操作中编写其他线程的关键部分?)
嗯,这就是阻塞调用的作用:暂停执行直到阻塞条件已经过去。