首页 > 解决方案 > 谁创建线程?程序员、操作系统、编译器还是编程语言?

问题描述

谁是线程的第一个和主要创建者?如果一种编程语言不支持线程,我们可以在其上运行多线程吗?如果操作系统不支持线程,我们可以在其上运行多线程吗?

标签: linuxwindowsmultithreading

解决方案


谁是线程的第一个和主要创建者?

操作系统

如果一种编程语言不支持线程,我们可以在其上运行多线程吗?

这取决于。如果该编程语言支持任何本机绑定(如 JNI/PINVOKE/Node.js 插件),您可以在该本机级别创建线程并将您的编程语言代码编组到本机线程中。

这可能是一个不完整的解决方案,因为线程还涉及内存屏障、内存排序、之前发生、共享数据等,您需要自己处理所有这些。

如果操作系统不支持线程,我们可以在其上运行多线程吗?

如果您的操作系统不支持多线程,那么没有什么能真正填补这个空白。您可以通过让编译器在代码中插入安全点来模拟多线程,并且每次程序到达安全点时,应用程序调度程序可能会停止当前代码执行并将执行切换到另一个伪线程。简而言之,我们称这种解决方案为“A 纤维”或“A green thread”。

有趣的是,Java 的早期版本就是这样做的,希望他们可以通过编写自己的更好的调度程序来击败 OS 调度程序,然后才明白他们并不比 Windows/Linux 内核开发团队更好。


推荐阅读