【问题标题】:What does built in support for multithreading mean?对多线程的内置支持是什么意思?
【发布时间】:2011-08-06 01:42:08
【问题描述】:

Java 为多线程编程提供内置支持。

这就是我的书所说的。我也可以在 C、C++ 中进行多线程编程。那么它们是否也提供了对多线程的内置支持?

对多线程的内置支持是什么意思?不是操作系统实际上提供了对多线程的支持吗?

有没有不支持多线程的编程语言?如果是,为什么? (我问这个问题是因为,如果操作系统支持多线程,那么为什么我们不能在该操作系统支持的所有语言上进行多线程编程?)

【问题讨论】:

    标签: multithreading programming-languages operating-system


    【解决方案1】:

    问题是多线程的语言支持与库支持之一。

    Java 使用关键字synchronized 对对象加锁是一种语言级别的结构。 Object 上的内置方法(wait、notify、notifyAll)也直接在运行时实现。

    关于语言是否应该通过关键字、语言结构和核心数据类型实现线程与在库中拥有所有线程功能存在一些争论。

    支持语言级线程有益观点的研究论文是比较著名的http://www.hpl.hp.com/personal/Hans_Boehm/misc_slides/pldi05_threads.pdf

    理论上,任何基于 C 运行时构建的语言都可以访问诸如 pthreads 之类的库,并且任何在 JVM 上运行的语言都可以使用这些线程。简而言之,所有可以使用库(并具有函数指针概念)的语言都可以进行多线程处理。

    【讨论】:

    • 感谢研究论文的链接。正是我想要的。
    【解决方案2】:

    我相信他们的意思是 Java 内置了诸如 volatilesynchronized 关键字之类的关键字,以使多线程更容易,并且该库已经提供了线程类,因此您不需要 3rd 方库。

    【讨论】:

    • 线程之间的锁定、信号量和通信方法使语言更易于使用,但并未定义该语言是多线程的。但是,没有它们,一种语言并不过分有用。
    【解决方案3】:

    语言需要构造来创建和销毁线程,而操作系统需要向语言提供这种行为。

    例外是 Java 绿色线程,它们根本不是真正的线程,我认为 Erlang 类似。

    一种不支持线程的语言,比如由 QBasic 在 DOS 中实现的 Basic。 Basic 应该是 basic,因此线程和进程是高级功能,在语言意图中是非生产性的。

    【讨论】:

    • @Yann 这是一个不需要操作系统支持的反例。当前状态无关紧要。
    【解决方案4】:

    C 和 C++ 作为一门语言没有以下机制:

    1. 开始一个线程
    2. 声明互斥体、信号量等

    这不是语言规范的一部分。然而,这样的设施存在于每个主要的操作系统上。与 Java 不同,这些工具在不同的操作系统上有所不同:Linux、OS X 和其他 UNIX 衍生产品上的 pthread,Windows 上的 CreateThread,实时操作系统上的另一个 API。

    Java 对Threadsynchronized 块和方法、“通知”、“等待”作为核心的一部分 Object 等有一个语言定义,这使得该语言能够正确理解多线程。

    【讨论】:

      【解决方案5】:

      这意味着该语言的运行时中有一些功能可以模拟线程的概念以及与之相关的所有功能,例如提供同步。幕后发生的事情取决于语言实现者......他们可以选择使用本机操作系统线程,或者他们可能会伪造它。

      不支持它的语言可能是 VB6(至少不是原生的,IIRC)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-08
        • 1970-01-01
        • 2010-12-14
        • 2015-01-22
        • 2016-01-01
        • 2015-06-02
        • 2012-11-29
        相关资源
        最近更新 更多