go中多线程的使用

  |   0 评论   |   0 浏览

背景

初体验

// 队列
jobs := make(chan string)
// 创建线程池
	for i := 0; i < 5; i++ {
		go func(id int) {
			for symbol := range jobs {
				// symbol <- jobs
				message := processSymbol(symbol)
				logger.Println(fmt.Sprintf("[thread %d] %s : %s", id, symbol, message))

				if len(message) > 0 {
					lock.Lock()
					resultList.PushBack(message)
					lock.Unlock()
				}
				wg.Done()
			}
		}(i)
	}
// 将任务发送到线程池
	symbols := utils.GetSymbols()
	// logger.Println(symbols)
	for j := symbols.Front(); j != nil; j = j.Next() {
		symbol := j.Value.(string)
		// logger.Println("--> " + symbol)
		wg.Add(1)
		jobs <- symbol
	}
	close(jobs)

	wg.Wait()

参考