#java #многопоточность
This question already has answers here: Многопоточное vs асинхронное программирование (4 ответа) Закрыт 2 года назад. В чем разница между понятиями multithreading, concurency, parallelism разве это не одно и тоже
Ответы
Ответ 1
Multithreading (многопоточность) - это использование нескольких потоков. При этом вовсе не обязательно, что эти потоки будут выполняться одновременно (параллельно). В эру одноядерных процессоров многопоточность тоже активно использовалась, например, в приложениях с GUI: тяжёлые вычисления выносятся в отдельный поток, чтобы не "замерзал" gui-поток. При этом понятно, что эти потоки выполняются по очереди, не одновременно. Parallelism (параллелизм, параллельность) - это использование нескольких потоков одновременно. Это возможно только в системах с несколькими ядрами/процессорами. Запускаются несколько потоков и они выполняются каждый на своём собственном ядре. Concurrency (с переводом этого термина на русский язык есть определённые проблемы: его переводят как параллельность, одновременность, конкуренция) - это возможный одновременный доступ к каким-либо ресурсам: памяти, файлам и т. п. Обычно это происходит в результате обращения к ресурсу из нескольких потоков. Естественно, один поток может испортить (перезаписать) результат выполнения другого потока. Чтобы этого не произошло, приходится использовать синхронизацию. Asynchrony (асинхронность) - асинхронный доступ к каким-либо ресурсам. Потоки при этом могут не использоваться вовсе. Например, операции ввода-вывода (IO) могут выполняться таким образом. Один единственный поток может инициировать чтение/запись с помощью асинхронного IO сразу во много файлов, сокетов и т. п.
Комментариев нет:
Отправить комментарий