Научная статья на тему 'СОВРЕМЕННЫЕ МЕТОДЫ МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ НА ПРИМЕРЕ ГОРУТИН И ЯЗЫКА ПРОГРАММИРОВАНИЯ ГО'

СОВРЕМЕННЫЕ МЕТОДЫ МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ НА ПРИМЕРЕ ГОРУТИН И ЯЗЫКА ПРОГРАММИРОВАНИЯ ГО Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
128
22
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МНОГОПОТОЧНОСТЬ / ПОТОКИ / ГОРУТИНЫ / МНОГОПОТОЧНОЕ ПРОГРАММИРОВАНИЕ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Ненахов А. С.

В данной статье рассматриваются методы многопоточного программирования в языке го и их преимущества перед потоками в других языках программирования.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «СОВРЕМЕННЫЕ МЕТОДЫ МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ НА ПРИМЕРЕ ГОРУТИН И ЯЗЫКА ПРОГРАММИРОВАНИЯ ГО»

ТЕХНИЧЕСКИЕ НАУКИ (TECHNICAL SCIENCE)

УДК 004.042

Ненахов А.С.

студент федерального государственного бюджетного учреждения высшего образования «Астраханский государственный университет» (Россия, г. Астрахань)

СОВРЕМЕННЫЕ МЕТОДЫ МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ НА ПРИМЕРЕ ГОРУТИН И ЯЗЫКА

ПРОГРАММИРОВАНИЯ ГО

Аннотация: в данной статье рассматриваются методы многопоточного программирования в языке го и их преимущества перед потоками в других языках программирования.

Ключевые слова: многопоточность, потоки, горутины, многопоточное программирование на языке го.

Очень часто, большие приложения состоят из множества небольших подпрограмм. Например, web-сервер принимает запросы от браузера и отправляет HTML страницы в ответ. Каждый такой запрос выполняется как отдельная небольшая программа.

Такой способ идеально подходит для подобных приложений, так как обеспечивает возможность одновременного запуска множества более мелких компонентов (обработки нескольких запросов одновременно). Одновременное выполнение более чем одной задачи известно, как многопоточность. Go имеет богатую функциональность для работы с многопоточностью, в частности, такие инструменты как горутины.

Горутина — это функция, которая может работать параллельно с другими функциями. Для создания горутины используется ключевое слово go, за которым следует вызов функции. Горутины очень легкие, мы можем создавать их тысячами. Первое что можно сказать о горутинах - это то, что горутины не являются обычными потоками операционной системы, исполняемая среда горутин может переиспользовать один и тот же поток, эмулируя работу настоящих потоков. В результате получается быстро и дешево. Горутины очень легкие (примерно 4.5кб на горутину против нескольких мегабайт на поток).

Одним из самых больших недостатков многопоточного программирования является сложность и хрупкость многих кодовых баз, которые используют потоки для достижения высокого уровня параллелизма. Go предоставляет вам примитивы, которые позволяют полностью избежать блокировки (Блокировка происходит, когда несколько процессов пытаются получить доступ к одному ресурсу одновременно). Другими словами, если двум горутинам необходимо обмениваться данными, они могут безопасно сделать это по каналу. Go выполняет всю синхронизацию за вас, и гораздо сложнее столкнуться с такими вещами, как тупиковые ситуации. Взаимоблокировка происходит, когда два (или более) потока блокируются в ожидании события, наступление которого на самом деле зависит от действий одного из заблокированных потоков. Например, если поток А ожидает изменения сигнальной переменной, устанавливаемой в потоке Б, а поток Б, в свою очередь, ждет сигнала от потока А, возникает тупиковая ситуация.

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

Подводя итоги вот преимущества горутин перед потоками:

В типичной системе вы можете запустить больше горутин, чем потоков.

Горутины запускаются быстрее, чем потоки.

Горутины имеют встроенные примитивы для безопасного взаимодействия между собой (каналами).

Горутины мультиплексируются в небольшое количество потоков ОС, а не в сопоставлении 1: 1.

Вы можете писать серверы с массовым одновременным запуском, не прибегая к последовательному программированию.

Горутины управляются средой выполнения go, а не операционной системой (в разных ОС потоки могут быть реализованы по-разному) Писать программы на горутинах намного проще.

СПИСОК ЛИТЕРАТУРЫ:

Михалис Цукалос Многопоточность // Golang для профи: работа с сетью, многопоточность, структуры данных и машинное обучение с Go, 2-е изд. 2020. С. 452;

Калеб Докси Многопоточность // Введение в программирование на Go 2015. С. 61-66;

Почему у вас могут быть миллионы горутин, но только тысячи потоков Java [Электронный ресурс]. URL: https://rcoh.me/posts/why-you-can-have-a-million-go-routmes-but-only-1000-java-threads/

i Надоели баннеры? Вы всегда можете отключить рекламу.