linux - 谁创建线程?程序员、操作系统、编译器还是编程语言?
问题描述
谁是线程的第一个和主要创建者?如果一种编程语言不支持线程,我们可以在其上运行多线程吗?如果操作系统不支持线程,我们可以在其上运行多线程吗?
解决方案
谁是线程的第一个和主要创建者?
操作系统
如果一种编程语言不支持线程,我们可以在其上运行多线程吗?
这取决于。如果该编程语言支持任何本机绑定(如 JNI/PINVOKE/Node.js 插件),您可以在该本机级别创建线程并将您的编程语言代码编组到本机线程中。
这可能是一个不完整的解决方案,因为线程还涉及内存屏障、内存排序、之前发生、共享数据等,您需要自己处理所有这些。
如果操作系统不支持线程,我们可以在其上运行多线程吗?
如果您的操作系统不支持多线程,那么没有什么能真正填补这个空白。您可以通过让编译器在代码中插入安全点来模拟多线程,并且每次程序到达安全点时,应用程序调度程序可能会停止当前代码执行并将执行切换到另一个伪线程。简而言之,我们称这种解决方案为“A 纤维”或“A green thread”。
有趣的是,Java 的早期版本就是这样做的,希望他们可以通过编写自己的更好的调度程序来击败 OS 调度程序,然后才明白他们并不比 Windows/Linux 内核开发团队更好。
推荐阅读
- mysql - 根据mysql中的多个字段获取常用数据
- python - 使用 GPU 时 Python XGBoost 继续训练
- javacard - Javacard 3.1 到 3.04 转换器
- python - 在不打开可执行文件的情况下查找过时的 ChromeDriver 版本 (Python)
- java - Spring Data Elasticsearch 删除 @Id 字段中的加号 (+)
- excel - 如何从英国亚马逊拉图像
- react-native - 如何在 app.json 中添加这些语句?
- jenkins - 为特定代理 Jenkins 配置工具
- c++ - 如何修复此代码以在 C++ 中读取此文件?
- react-native - Expo 安全存储在开玩笑测试中不可用