Bloqueio de Golang e não bloqueio
Estou um pouco confuso sobre como o Go lida com E / S sem bloqueio. As APIs parecem principalmente síncronas comigo e, ao assistir apresentações no Go, não é incomum ouvir comentários como "e os bloqueios de chamada"
O Go está usando E / S de bloqueio ao ler arquivos ou rede? Ou existe algum tipo de mágica que reescreve o código quando usado de dentro de uma rotina Go?
Vindo de um background C #, isso parece muito intuitivo, em C # temos oawait
palavra-chave ao consumir APIs assíncronas. O que comunica claramente que a API pode gerar o encadeamento atual e continuar mais tarde dentro de uma continuação.
Então TLDR; O Go bloqueará o encadeamento atual ao fazer E / S dentro de uma rotina Go, ou será transformado em um C # como assíncrono aguardando máquina de estado usando continuações?