【发布时间】:2021-10-29 01:13:42
【问题描述】:
我正在阅读有关线程和进程之间的差异的信息,实际上在网上到处都是,通常写一个差异而没有太多解释:
如果一个进程被阻塞,剩余的进程可以继续执行。 如果一个用户级线程被阻塞,它的所有对等线程也会得到 被屏蔽了。
这对我来说没有任何意义。如果调度程序无法在阻塞线程和就绪/可运行线程之间切换,那么并发的意义是什么?给出的原因是,由于操作系统不区分给定父进程的各个线程,它会立即阻止所有线程。
我觉得这很难令人信服,因为所有现代操作系统都有带有线程 ID 的线程控制块,即使它仅在父进程的内存空间内有效。就像 Galvin 的操作系统一书中给出的示例一样,如果拼写检查线程无法连接到某些在线词典,我不希望处理我的输入的线程被阻塞。
要么我对这个概念的理解有误,要么所有这些网站多年来都只是复制了一些旧线程差异。此外,我无法在诸如 Galvin 的书籍或 William Stalling 的 COA 书中讨论过线程的书籍中找到此声明。
这些是我找到这些语句的资源:
【问题讨论】:
-
请提供来源(f)或更多上下文...因为可能来源错误,或者更可能的是,该段落的上下文改变了含义。也许这一段都是关于控制一组线程的?
-
线程和进程的主要区别在于前者共享一个地址空间,而后者不共享。事实上,大多数操作系统调度线程,进程实体只是每个线程的一个属性。
-
您引用的文字似乎存在here。始终对 Medium 上的内容持保留态度。他们的信息质量是相当规律的,在这种情况下,完全是错误的。
-
@AMANKUMAR:这些都是用户提交的教程,经常重复有人在某处读过但不完全理解的语句。或者没有意识到已经过时,或者他们没有考虑到现实世界的现代系统是否真的做到了这一点。
-
问题是,写一个好的教程是很多工作。这些网站上的许多帖子(我认为)都是由刚刚学习某个主题的初学者作为学习练习编写的。 Stack Overflow 也是如此,因为 cmets 更显眼,专家评审更积极,并且更期望通过编辑来修复错误。此外,SO 答案更短,因此任何错误通常都更关注答案的重点(尽管我们确实看到答案因其主要观点而获得赞成票,而它们包含对其他事物的错误陈述)。
标签: java multithreading operating-system cpu-architecture green-threads