maste.go
package main
import (
"fmt"
"os"
"runtime"
"test"
"time"
)
var x chan []int = make(chan []int, 1)
var Num int = 100
var WNum int = 100
func main() {
fmt.Println(time.Now())
var list1, list2 []int
var R chan []int = make(chan []int, 1)
for i := 0; i < WNum; i++ {
go Chan(Num, R)
}
for i := 0; i < WNum; i++ {
select {
case y := <-R:
if len(list1) == 0 {
list1 = y
} else {
list2 = y
list1 = test.Merge(list1, list2)
}
}
}
fmt.Println(time.Now())
fmt.Println(len(list1))
File, _ := os.OpenFile("c.txt", os.O_RDWR|os.O_CREATE, 0777)
File.Write([]byte(fmt.Sprint(list1)))
File.Close()
}
func Chan(Num int, R chan []int) {
var list1, list2 []int
runtime.GOMAXPROCS(2)
for i := 0; i < Num; i++ {
go func() {
x <- test.Rand_list(1000)
}()
}
for i := 0; i < Num; i++ {
select {
case y := <-x:
if len(list1) == 0 {
list1 = y
} else {
list2 = y
list1 = test.Merge(list1, list2)
}
}
}
R <- list1
}
test目录下:
package test
func Merge(list1, list2 []int) []int {
list1_Num := len(list1)
list2_Num := len(list2)
var j int = 0
var list3 []int
for i, _ := range list1 {
This:
if list1[i] <= list2[j] {
list3 = append(list3, list1[i])
if i == list1_Num-1 {
for z := j; z < list2_Num; z++ {
list3 = append(list3, list2[z])
}
break
}
} else {
if j <= list2_Num-1 {
list3 = append(list3, list2[j])
if j == list2_Num-1 {
for j := i; j < list1_Num; j++ {
list3 = append(list3, list1[j])
}
break
}
j++
goto This
}
}
}
return list3
}
package test
import (
"math/rand"
)
func Rand_list(Num int) []int {
var list []int
for i := 0; i < Num; i++ {
list = append(list, rand.Intn(100000))
}
for i := 0; i < Num; i++ {
for j := i + 1; j < Num; j++ {
if list[i] > list[j] {
list[i], list[j] = list[j], list[i]
}
}
}
return list
}