Как другие goroutines могут выполнять выполнение при вызове syscall? (при использовании GOMAXPROCS = 1)
Насколько мне известно, при вызове syscall поток сбрасывает контроль до тех пор, пока syscall не вернется.
Как можно добиться этого concurrency, не создавая системный поток для блокировки на syscall goroutine?
Из документации:
Goroutines
Они называются goroutines, потому что существующие термины-потоки, сопрограммы, процессы и т.д. - передают неточные коннотации. goroutine имеет простую модель: это функция, выполняемая одновременно с другими goroutines в том же адресном пространстве. Это легкий, стоить немного больше, чем распределение пространства стека. И стеки начинаются с малого, поэтому они дешевы и растут за счет выделения (и освобождения) хранилище кучи по мере необходимости.
Goroutines мультиплексируются на несколько потоков ОС, поэтому, если нужно блок, например, ожидая ввода-вывода, другие продолжают работать. Их дизайн скрывает многие сложности создания потоков и управление.