同時プログラミングの例
3006 ワード
golangのtimerを使う
タイミングタスク
だんぞくき
タイムアウト
カスタムタイマ
時間制御によるticker停止
フォルダのすべてのファイルの長さを同時に読み込む(チャネルを使用)
フォルダのすべてのファイルを同時に読み込む(sync.WaitGroupを使用)
これを使うのは実はカウンターの理屈です
トークン-別の信号カウンタ
個人ブログ:http://blog.xbug.site
タイミングタスク
func demo(input chan interface{}) {
t1 := time.NewTimer(time.Second * 5)
t2 := time.NewTimer(time.Second * 10)
for {
select {
case msg
だんぞくき
func main(){
ticker := time.NewTicker(time.Second)
for t := range ticker.C {
fmt.Println("ticker", t)
}
}
タイムアウト
func main(){
ch1 := make(chan int, 1)
ch2 := make(chan int, 1)
select {
case e1 :=
カスタムタイマ
func main(){
var t *time.Timer
f := func(){
fmt.Printf("Expiration time : %v.
", time.Now())
fmt.Printf("C`s len: %d
", len(t.C))
}
t = time.AfterFunc(1*time.Second, f)
// Goroutine 2s,
// ,time.AfterFunc 。 f。
time.Sleep(2 * time.Second)
}
時間制御によるticker停止
func main(){
// , 2s
var ticker *time.Ticker = time.NewTicker(1 * time.Second)
go func() {
for t := range ticker.C {
fmt.Println("Tick at", t)
}
}()
time.Sleep(time.Second * 5) // , sleep /ticker
ticker.Stop() // ticker
fmt.Println("Ticker stopped")
}
フォルダのすべてのファイルの長さを同時に読み込む(チャネルを使用)
func test1() {
// ,
dir := "./db"
paths, err := ioutil.ReadDir(dir)
check(err)
var files []string
for _, path := range paths {
if !path.IsDir() {
files = append(files, path.Name())
}
}
type FileInfo struct {
FileName string
Len int
Err error
}
way := make(chan FileInfo, 100)
for _, file := range files {
go func(fileName string) {
content, err := ioutil.ReadFile(fmt.Sprintf("%s/%s", dir, fileName))
// ,
way
フォルダのすべてのファイルを同時に読み込む(sync.WaitGroupを使用)
これを使うのは実はカウンターの理屈です
func test1() {
dir := "./db"
paths, err := ioutil.ReadDir(dir)
check(err)
var files []string
for _, path := range paths {
if !path.IsDir() {
files = append(files, path.Name())
}
}
// sizes goroutine
sizes := make(chan int64)
//
var wg sync.WaitGroup
for _, file := range files {
wg.Add(1)
go func(fileName string) {
defer wg.Done()
fileInfo, _ := os.Stat(fmt.Sprintf("%s/%s", dir, fileName))
sizes
トークン-別の信号カウンタ
func check(err error) {
if err != nil {
panic(err)
}
}
func main() {
//
workList := make(chan []string)
// , map
seen := make(map[string]bool)
// n
n := 1
//
go func() { workList 0; i++ {
list :=
個人ブログ:http://blog.xbug.site