Как стать автором
Обновить

Комментарии 14

По умолчанию, в Go все goroutines выполняются в одном потоке (thread) по очереди. Так что формально это однопоточная программа, хотя и имеет пять независимых путей исполнения. Количество os threads задается через GOMAXPROCS.

Презентация по теме: «Concurrency is not Parallelism (it's better)»
А как же:

// Просим Go использовать все имеющиеся в системе процессоры.
runtime.GOMAXPROCS(runtime.NumCPU())

?
А это я пропустил. Очень торопился ссылкой поделиться =)
видео доклада по этим слайдам существует?
Да в документации такое есть, но вот что еще интереснее. Я создал 10 горутин на 2ядерном CPU и когда запускаю ps -fL я вижу 10 потоков. Использовал golang 1 из debian testing.
два независимых потока для чтения и чтения из локального и удаленного сокета
Эм, а не чтения и записи?
Просто чтения. Исправил, спасибо.
> TCP/IP proxy
Я вспомнил, как 4 года назад на Delphi писал первую программу, которая напрямую вызывает функции стека, не пользуясь готовыми объектами. Это был как раз таки однопоточный портовый прокси с дампом данных. Эту программу я использовал для дебага и реверс инженеринга. И до сих пор ей пользуюсь.

Извините за оффтоп
А почему в хаб Go не включили?
Включил.
Go подталкивает на многопоточное программирование (а не отталкивает, как C++, даже на стероидах нового стандарта).

Голый С++ может и отталкивает от потоков.
Но библиотеки типа boost.asio наоборот позволяют элементарно писать многопоточные программы без явной низкоуровневой синхронизации.
Супер!

Может быть глупый вопрос, но почему binary_logger не создётся через make(chan []byte)?
Не понял вопроса. Ведь binary_logger — это функция. Причем тут канал?
Упс, еще не проснулся. Наверное, смутило в структуре:
logger, binary_logger chan []byte
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации