繁体   English   中英

阻塞模式是什么意思?

[英]What does blocking mode mean?

当与 POSIX C 函数相关时,我似乎找不到“阻塞”(或就此而言“非阻塞”)的有用定义。

例如,可以在 FIFO 管道上以阻塞或非阻塞模式调用read() 如果在阻塞模式下调用,它将阻塞,直到它在别处打开进行写入。

这种阻塞会占用线程吗? 还是过程? 还是会暂停多元宇宙的渲染?

阻塞意味着线程在等待事件发生时从 CPU 中取消调度。 当一个线程被取消调度时,它不会消耗任何 CPU 周期,并且如果没有其他线程等待运行,则允许其他线程取得进展或将 CPU 置于低功耗状态。

一个线程阻塞不会影响进程中可能存在的其他线程。 阻塞调用只会阻塞调用线程。

例如,当管道中没有要读取的数据时read块。 当数据到达时,它“解除阻塞”并且read调用返回。

在内核中,每个文件描述和其他可以阻塞的对象(例如mutexcondition_variable )都有一个等待线程列表。 当一个线程在一个对象上阻塞时,它会被附加到该对象的等待列表中并从 CPU 中取消调度。 每当对象的事件发生时,内核会检查等待线程的等待列表,以便等待此类事件,如果有任何一个或多个线程再次被调度并且阻塞调用最终返回。

在非阻塞模式下,此类调用不会阻塞,而是立即返回错误代码,其中errno被设置为EWOULDBLOCKEAGAIN ,现在它们是同一个errno值的两个不同名称。 (pthread 调用不设置errno而是直接返回错误值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM