Яка різниця між потоком Java та потоком C / C ++?


Відповідь 1:

Нитки Java були реалізовані за допомогою нетипових потоків під назвою Зелені нитки.

Напевно, слід зазначити, що "потік у C ++" є найскладнішим на першому місці: підтримка багатопотокового редагування на мовному рівні лише в C ++ 11, а нитки раніше надавались певними платформами, такими як POSIX pthreads та потоки Windows.

  • Java = одна абстракція, багато реалізацій; C ++ = багато абстракцій, багато реалізацій

Відповідь 2:

Потік виконання - це найменша послідовність запрограмованих інструкцій, якими може керувати самостійно планувальник, яка, як правило, є частиною операційної системи.

Java - це багатопотокова мова програмування, що означає, що ми можемо розробляти багатопотокові програми за допомогою Java. Багатопотокова програма містить дві або більше частин, які можуть працювати одночасно, і кожна частина може одночасно впоратися з різною задачею, використовуючи оптимальне використання наявних ресурсів, особливо коли на вашому комп'ютері є кілька процесорів.

За визначенням, багатозадачність - це коли багато процесів поділяють загальні ресурси обробки, такі як ЦП. Багатопотокове розширення ідеї багатозадачності в додатках, де ви можете розділити конкретні операції в рамках однієї програми на окремі потоки. Кожна з ниток може працювати паралельно. ОС розділяє час обробки не тільки між різними програмами, але і між кожним потоком всередині програми.

Багатопоточна передача дає змогу писати таким чином, коли одночасно в одній програмі можуть проходити кілька дій.

Здається, що C надає більший вибір для синхронізації, таких як Mutex, блокування читання-запису, блокування записів, семафори Posix.

Java у більшості аспектів дещо вищий, ніж C / C ++, головним чином завдяки абстракції, яку надає JVM. Таким чином, він менш ефективний і віддалений від ОС.

Приклад цього є синхронізованими методами, реалізація може використовувати різні механізми залежно від основної ОС.

Завдяки цій меншій ефективності C / C ++ вважається кращим для деяких завдань, де ефективність дуже важлива, як ті, які ви згадуєте.

Я б вважав, що (абстрагування через JVM і, отже, більш високий рівень) є основною причиною та джерелом відмінностей між C / C ++ та Java, як те, як обробляються потоки та інші відмінності, лише аспекти чи наслідки цієї основної різниці.

Зокрема, щодо блокування читання-запису, Java надає інструменти для їх використання (як зазначено в попередніх коментарях), і, ймовірно, будь-який спосіб синхронізації, який ви, можливо, хочете використовувати, доступний або реалізований на Java певним чином. Як JVM переводить це на виклики ОС і ефективність результату - інша справа.

Різниця в аспекті MultiThread між Java та C / C ++ ReadWriteLock (Java Platform SE 6)