Страницы

Поиск по вопросам

пятница, 29 ноября 2019 г.

Чем отличаются потоки от нитей?

#java #многопоточность


Вроде как должно быть одно и тоже, так как thread переводят и как "поток", и как
"нить". Вроде как, при создании потока (нити) и в послед запуске он может разбиваться
на нити?

Это поток порождает себе подобных (потоки такие же как и он) или же он порождает
нити (которые видимо являются неполноценными потоками)? 

А еще, являются ли потоки чтения (с консоли, файла) и вывода (в файл) такими же потоками? 

Почему тогда мы не вызываем у них методы start и пр., а только close? 

Или же можно запустить нить создав лишь объект их типа? 

Неужели это все одни и те же потоки? И еще, наличие 2-х нитей c thread и с runnable
обусловлено тем, что с 1-ым нельзя наследоваться, но легче запускать, а со 2м можно
наследоваться, но сложнее запускать?
    


Ответы

Ответ 1



Вроде как должно быть одно и тоже , тк thread переводят и так , и так. Одно и то же. Вот если встретите термин Fiber - там все немного интересней, взаимодействие с ним происходит как с потоком, но классическим ОС-потоком он не является. Вроде как , при создании потока(нити) и в послед запуске он может разбиваться на нити? Разбиваться не может, порождать - может. Порожденные потоки имеют ровно те же возможности. А еще , являются ли потоки чтения(с консоли,файла) и вывода(в файл) такими же потоками? Нет, мы говорим про потоки выполнения, а это - потоки данных, т.е. просто последовательная перекачка байтов из одного места в другое. И еще , наличие 2х нитей c thread и с runnable обусловлено тем , что с 1ым нельзя наследоваться , но легче запускать ,а со 2м можно наследоваться , но сложнее запускать? не берусь судить за архитекторов API, но наследоваться от класса потока вам не стоит вообще никогда. В большинстве случаев вам так вообще потребуется ExecutorService, который возьмет на себя управление потоками, а вы будете просто отдавать ему задачи на выполнение в виде Runnable или аналога.

Ответ 2



Трудности перевода. "Потоки" - это threads и streams, хотя в источнике это означает абсолютно разные вещи. В литературе чаще всего придерживаются перевода "потоки" в обоих случаях (где из контекста понятно, о каких потоках идет речь), но некоторые персоны предпочитают подчеркивать отличие называя treads нитями. PS Да и streams в той же Java бывают совершенно разными: I/O streams, Stream API.

Комментариев нет:

Отправить комментарий