Горутина - это так называемый "легковесный поток", который реализован на программном уровне, в отличии от потоков и процессов операционной системы. Они дают нам слой абстракции для буферного накопления и распределения выполнения горутин между потоками в процессах операцинной системы. Что может быть гораздо эффективнее в мире многоядерных процессоров. Создание горутин несёт меньше накладных расходов, чем создание потоков. Множество горутин могут выполняться на одном потоке. Горутины общаются между собой через каналы.
Системные потоки и процессы - это две ключевые концепции, используемые в операционных системах для выполнения задач. Вот основные различия между ними:
Процесс:
- Процесс - это экземпляр программы, который выполняется.
- Каждый процесс имеет свое собственное адресное пространство и не делится его с другими процессами.
- Процессы требуют IPC (межпроцессное взаимодействие) для общения друг с другом.
- Каждый раз, когда мы создаем процесс, нам нужно сделать отдельный системный вызов для каждого процесса к ОС.
Поток (Thread):
- Поток - это базовая единица использования ЦПУ, состоящая из счетчика программ, стека и набора регистров.
- Потоки выполнения образуются в результате разветвления компьютерной программы на две или более одновременно выполняющихся задач.
- Реализация потоков и процессов отличается от одной операционной системы к другой, но в большинстве случаев поток содержится внутри процесса.
- Несколько потоков могут существовать в рамках одного и того же процесса и делить ресурсы, такие как память, в то время как разные процессы не делят эти ресурсы.
- Потоки - это по сути процессы, которые работают в одном и том же контексте памяти.
Важно отметить, что потоки и процессы связаны, но в то же время являются ортогональными понятиями. Поток - это то, что фактически выполняет ЦПУ; это связано с планированием доступа к общим ресурсам (например, ЦПУ). Процесс - это выделенная память для инструкций и данных (процессу требуется память для кода и данных).