Você decidiu escrever WaitGroup porque apareceu um canal ou porque decidiu escrever goroutines para alguma coisa?
Golang
O que achas das horas extras?
O que te chamou a atenção nesta vaga e por que estás a sair do teu emprego anterior?
Tem alguma pergunta para mim?
Pode uma goroutine escrever diretamente para outra goroutine num canal com buffer?
O que a convenção Go diz sobre o uso de WaitGroup e tipos de retorno (aceitando interfaces, retornando tipos específicos)?
Quais são os tipos de índices no PostgreSQL além do B-tree?
Qual foi o teu papel na tomada de decisões arquitetónicas durante o desenvolvimento do serviço de pesquisa?
Por que queue (de qual palavra Q)?
Já usou contextos na prática? Conta-me.
Que tecnologia/ferramenta usas?
O trabalho é permitido apenas dentro do território da Federação Russa?
func New(workers, queue, int) Scheduler { s := &scheduler { queue := make(chan Task, queue) for i := 0; i < workers; i++ { wg.Add(1) go func() { defer wg.Done() for task := range s.queue { task.Do() } }() } } return s } func (s *scheduler) Close() { close(s.queue) s.wg.Wait() } type Task interface { Do() }
// O cliente passa um objeto (Task) com dados para executar a tarefa, // no nosso exemplo, usaremos uma estrutura vazia. // // O gestor pode processar no máximo N tarefas simultaneamente, // e no máximo X tarefas podem estar na fila de espera. // Se não houver espaço na fila, retorna-se um erro imediatamente ao cliente. // // A tarefa é processada se houver processadores livres. // Simulamos a duração do processamento com time.Sleep(5*time.Second). // Assim que uma tarefa termina, pegamos a próxima na fila. // Se a fila estiver vazia, aguardamos novas tarefas dos clientes. // // Com um asterisco: completar a estrutura Task e obter os estados das tarefas através de uma consulta separada. package scheduler type Scheduler interface { AddTask(t Task) error Close() } type scheduler struct { queue chan Task wg sync.WaitGroup } func New(workers, queue int) Scheduler { // implementação pendente } type Task interface { Do() }
Queres escrever um pool de trabalhadores clássico?
Tipos de replicação no PostgreSQL
Qual é a diferença entre SELECT FOR UPDATE e SELECT FOR SHARE?
Como resolvias as situações quando a tua decisão era rejeitada?
Que documentos eram armazenados no ELK?
Ainda há corridas de dados na implementação? Especificamente no método Keys, que retorna uma fatia de chaves?