Информация об изменениях

Сообщение Re[20]: Через год-два .NET Core потеснит Java на рынке enter от 22.04.2020 12:46

Изменено 22.04.2020 12:50 vsb

Re[20]: Через год-два .NET Core потеснит Java на рынке enter
Здравствуйте, takTak, Вы писали:

T>разница от дотнет в том, что в случае явы нужно тащить технические концепции в код, который просто должен вывести параллельно список букв, в дотнете необходимости в этом нет


Какие концепции? ForkJoinPool? Ну оно же не на магии работает. Естественно надо тащить.

T>мне непонятно:

T>последний .join() блокирует UIThread\MainThread или нет ?

Блокирует. Это кусок main-а, если его не написать, то main завершается прежде, чем отработает задача и ничего не будет распечатано. Если не надо блокировать — не блокируй.

T>допустим, при выведении "b" в .forEach происходит исключение, как ты его будет отлавливать ? повлияет ли это исключение на вывод других букв?


После первого исключения всё остановится и join() выбросит это исключение.

T>допустим, ты хочешь прервать выведение "c" в .forEach, как ты будешь это делать ?


Я думаю, это некорректная постановка задачи. Но можно тупо бросить исключение, да, оно остановится всё. А вообще надо писать так, чтобы не было такой задачи, исключения для исключительных ситуаций, а не для контроля потока выполнения.

T>если ты хочешь, чтобы вначале вывелось буква "б", а после неё вывелась бы буква "в" , будет ли еxecutor или что там в яве есть, располагать их в одном и том же потоке, чтобы минимизировать переключение между потоками или тебе нужно руками это прописывать? стандартный дотнетовский taskscheduler такое делает за меня автоматически


forEach это параллельная конструкция. Он разбрасывает все элементы по executor-ам в абсолютно случайном порядке.

T>по какому алгоритму происходит распределение задач в пуле потоков? work stealing в стандартной яве используется?


Да.
Re[20]: Через год-два .NET Core потеснит Java на рынке enter
Здравствуйте, takTak, Вы писали:

T>разница от дотнет в том, что в случае явы нужно тащить технические концепции в код, который просто должен вывести параллельно список букв, в дотнете необходимости в этом нет


Какие концепции? ForkJoinPool? Ну оно же не на магии работает. Естественно надо тащить.

T>мне непонятно:

T>последний .join() блокирует UIThread\MainThread или нет ?

Блокирует. Это кусок main-а, если его не написать, то main завершается прежде, чем отработает задача и ничего не будет распечатано. Если не надо блокировать — не блокируй.

T>допустим, при выведении "b" в .forEach происходит исключение, как ты его будет отлавливать ? повлияет ли это исключение на вывод других букв?


После первого исключения всё остановится и join() выбросит это исключение.

T>допустим, ты хочешь прервать выведение "c" в .forEach, как ты будешь это делать ?


Я думаю, это некорректная постановка задачи. Но можно тупо бросить исключение, да, оно остановится всё. А вообще надо писать так, чтобы не было такой задачи, исключения для исключительных ситуаций, а не для контроля потока выполнения. Можно написать forkJoinPool.shutdownNow(); тогда при попытке выполнить следующую задачу оно кинет CancellationException, тоже не слишком хорошо, но, наверное, это ближе всего к желаемому.

T>если ты хочешь, чтобы вначале вывелось буква "б", а после неё вывелась бы буква "в" , будет ли еxecutor или что там в яве есть, располагать их в одном и том же потоке, чтобы минимизировать переключение между потоками или тебе нужно руками это прописывать? стандартный дотнетовский taskscheduler такое делает за меня автоматически


forEach это параллельная конструкция. Он разбрасывает все элементы по executor-ам в абсолютно случайном порядке.

T>по какому алгоритму происходит распределение задач в пуле потоков? work stealing в стандартной яве используется?


Да.