Что означает встроенная поддержка многопоточности? - PullRequest
3 голосов
/ 06 августа 2011

Java предоставляет встроенную поддержку многопоточного программирования.

Так говорится в моей книге.Я могу заниматься многопоточным программированием и на C, C ++.Так они также предоставляют встроенную поддержку многопоточности?

Что означает встроенная поддержка многопоточности?Разве это не ОС, которая на самом деле обеспечивает поддержку многопоточности?

Существуют ли языки программирования, которые не поддерживают многопоточность?Если так, то почему?(Я задаю этот вопрос, потому что, если ОС обеспечивает поддержку многопоточности, то почему мы не можем выполнять многопоточное программирование на всех языках, которые поддерживаются в этой ОС?)

Ответы [ 5 ]

4 голосов
/ 06 августа 2011

Проблема заключается в поддержке языков и библиотек для многопоточности.

Использование Java ключевого слова synchronized для установки блокировок на объектах является конструкцией уровня языка.Кроме того, встроенные методы Object (wait, notify, notifyAll) реализованы непосредственно во время выполнения.

Существует небольшая дискуссия о том, должны ли языки реализовывать потоки через ключевые слова и языковые структуры и основные данные.типы против всех возможностей потоков в библиотеке.

Исследовательская работа, подтверждающая мнение о том, что многопоточность на уровне языка выгодна, является относительно известной http://www.hpl.hp.com/personal/Hans_Boehm/misc_slides/pldi05_threads.pdf.

Теоретически, любой язык, основанный насреда выполнения C может обращаться к библиотеке, такой как pthreads, и любой язык, работающий на JVM, может использовать эти потоки.Короче говоря, все языки, которые могут использовать библиотеку (и имеют понятие указателей функций), действительно могут выполнять многопоточность.

1 голос
/ 06 августа 2011

Я полагаю, они означают, что в Java есть ключевые слова, такие как volatile и synchronized, встроенные ключевые слова, чтобы упростить многопоточность, и что библиотека уже предоставляет классы потоков, поэтому вам не нужна сторонняя библиотека.

0 голосов
/ 06 августа 2011

Это означает, что во время выполнения языка есть функциональность, которая моделирует понятия потоков и все, что с этим связано, например, обеспечение синхронизации.То, что происходит за кулисами, зависит от разработчиков языков ... они могут выбрать использование нативных потоков ОС или могут имитировать это.

Язык, который его не поддерживает, может быть VB6 (по крайней мере, изначально, IIRC)

0 голосов
/ 06 августа 2011

C и C ++ как язык не имеют механизма для:

  1. Начать тему
  2. Объявить мьютекс, семафор и т. Д.
  3. и т.д.

Это не является частью спецификации языка. Однако такие возможности существуют в каждой основной операционной системе. В отличие от Java, эти возможности различаются в разных операционных системах: pthread в Linux, OS X и других производных UNIX, CreateThread в Windows, другой API в операционных системах реального времени.

В Java есть определение языка для блоков и методов Thread, synchronized, «уведомление», «ожидание» как часть ядра Object и т. П., Что позволяет собственному языку понимать многопоточность.

0 голосов
/ 06 августа 2011

Языку нужны конструкции для создания и уничтожения потоков, и, в свою очередь, ОС должна предоставить это поведение языку.

Исключением являются зеленые потоки Java, которые вообще не являются реальными потоками, аналогично ErlangЯ думаю.

Язык без поддержки потоков, скажем, Basic, реализованный QBasic в DOS.Basic должен быть basic , поэтому потоки и процессы - это расширенные функции, которые непродуктивны с точки зрения языков.

...