Gox言語では、基本的にGo言語の同時実行メカニズムと、データセキュリティ共有操作に使用されるチャネルタイプchanを継承します。
chan型の使用については、まずQlangの説明をご覧ください。
ちゃんタイプ
ch1 = make(chan bool, 2) // 得到 buffer = 2 的 chan bool
ch2 = make(chan int) // 得到 buffer = 0 的 chan int
ch3 = make(chan map[string]int) // 得到 buffer = 0 的 chan map[string]int
Go言語と同様に、chanには次の組み込み演算があります。
n = len(ch1) // 取得chan当前的元素个数
m = cap(ch1) // 取得chan的容量
ch1 <- true // 向chan发送一个值
v = <-ch1 // 从chan取出一个值
close(ch1) // 关闭chan,被关闭的chan是不能写,但是还可以读(直到已经写入的值全部被取完为止)
chanが閉じられた後、<-chは未定義の値を取得することに注意してください。したがって、qlangでは次のようになります。
v = <-ch1
if v != undefined { // 判断chan没有被关闭的逻辑
...
}
より詳細な使用法を次の例に示します。
c = make(chan int)
go fn() {
for {
c <- 1
tk.SleepSeconds(1)
}
}()
go fn() {
for {
c <- 200
tk.SleepSeconds(1)
}
}()
go fn() {
for {
tmp = <-c
println(tmp)
tk.SleepMilliSeconds(500)
}
}()
for {
tk.SleepSeconds(5)
println("main thread")
}
このコードでは、3つのGoroutineが作成され、3つのスレッドとして理解できます。最初の2つのスレッドは1秒ごとにチャネルにデータを書き込み、3番目のスレッドは500ミリ秒ごとにチャネルからデータを書き込みます。データを読み取って表示します。さらに、メインスレッドを忘れてはなりません。メインスレッドは常に存在している必要があります。そうでない場合、子スレッドはすべてメインスレッドの終わりで終了します。したがって、メインスレッドに無限ループがあり、5秒ごとに情報が出力されます。
また、3つのGoroutineはすべてgoと無名関数で実行されることに注意してください。goの使用方法はGo言語と同じで、他の関数もスレッドとして開始できます。
Ctrl-Cを使用してプログラムを終了すると、コード全体の実行結果は次のようになります(Ctrl-Cを押して終了するまで無限に繰り返されます)。
λ gox chan.gox
1
200
1
200
1
200
1
200
1
200
main thread
1
200
1
200
*注:バージョン0.988以降、不必要なファイルサイズを減らすために、Goxは他のスクリプトエンジンを廃止し、Qlangエンジンのみをサポートしているため、次のコンテンツは無効になり、古いバージョンへの参照用にのみ予約されています。
そして以下は同様のAnkoエンジン版の使い方です。
まず第一に、任意の関数をgoキーワードを使用してスレッドとして開始できることは非常に便利です。チャネルはmake(chan文字列)などの方法で定義できます.Go言語のいわゆるチャネルは、データを共有するための同時実行の安全性です特定のデータ型については、特定の使用法についてGo言語の公式ドキュメントを参照してください。
より詳細な使用法を次の例に示します。
tk = import("tk")
c = make(chan int64)
go func() {
for {
c <- 1
tk.SleepSeconds(1)
}
}()
go func() {
for {
c <- 200
tk.SleepSeconds(1)
}
}()
go func() {
for {
tmp = <-c
println(tmp)
tk.SleepMilliSeconds(500)
}
}()
for {
tk.SleepSeconds(5)
println("main thread")
}
このコードでは、3つのGoroutineが作成され、3つのスレッドとして理解できます。最初の2つのスレッドは1秒ごとにチャネルにデータを書き込み、3番目のスレッドは500ミリ秒ごとにチャネルからデータを書き込みます。データを読み取って表示します。さらに、メインスレッドを忘れてはなりません。メインスレッドは常に存在している必要があります。そうでない場合、子スレッドはすべてメインスレッドの終わりで終了します。したがって、メインスレッドに無限ループがあり、5秒ごとに情報が出力されます。
Ctrl-Cを使用してプログラムを終了すると、コード全体の実行結果は次のようになります(Ctrl-Cを押して終了するまで無限に繰り返されます)。
λ gox scripts\chan.gox
1
200
1
200
1
200
1
200
1
200
main thread
1
200
1
200
1
200