Golang は、近年並行プログラミングで広く使用されているよく知られた開発言語です。 Golang では、ゴルーチンは簡単に作成および破棄できる軽量のスレッドです。 goroutine を開始することは、並行プログラミングを実装する一般的な方法です。この記事では、Golang 関数の goroutine を開始する実装テクニックについて説明します。
1. goroutine を開始する関数の基本形式
Golang では、 goroutine を開始するのは非常に簡単です。関数呼び出しの前に「go」キーワードを追加するだけです。例:
func main() { go myFunction() }
上の例では、main 関数は myFunction という名前のゴルーチンを開始します。この関数は新しいスレッドで実行されます。
2. goroutine を使用して同時 I/O を実装する
高同時実行プログラミングでは、複数の I/O 操作を同時に処理する必要があることがよくあります。これはゴルーチンを使用すると非常に簡単に実現できます。たとえば、メインスレッドのブロックを避けるために、複数の読み取りおよび書き込み操作を複数のゴルーチンとして起動できます。
以下は、ゴルーチンを使用して同時読み取りと書き込みを実装する方法を示す例です:
func performIO() { go readFromSocket() go writeToDatabase() }
上の例では、performIO 関数は読み取りおよび書き込み操作のために 2 つのゴルーチンを同時に開始します。 。これにより、これらの操作を同時に実行できるようになります。
3. goroutine を使用してタイムアウト制御を実装する
場合によっては、オペレーションの実行時間を制限する必要があるかもしれません。この操作がタイムアウトになった場合は、操作を中止して他の処理を行う必要があります。 Golang では、ゴルーチンを使用してこれを実現できます。
次の例は、Goroutine を使用してタイムアウト制御を実装する方法を示しています。
func performOperation() { // 设置timeout为10秒钟 timeout := time.After(10 * time.Second) // 用select同时监听操作和timeout select { case <-operationFinished: // 操作完成 case <-timeout: // 操作超时 } }
上の例では、time.After 関数を使用して 10 秒のタイムアウトを作成します。次に、select を使用して、操作の完了イベントとタイムアウト イベントの両方をリッスンします。何らかのイベントが発生すると、select 関数が戻ります。
4. goroutine を使用してスレッド プールを実装する
一部の同時実行性の高いサーバー アプリケーションでは、スレッドの割り当てと破棄を管理するためにスレッド プールを使用する必要がある場合があります。 Golang では、ゴルーチンを使用してスレッド プールを非常に簡単に実装できます。
次は、Goroutine を使用して単純なスレッド プールを実装する方法を示す例です:
func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { // 处理任务 results <- j * 2 } } func pool() { // 初始化工作队列和结果队列 jobs := make(chan int, 100) results := make(chan int, 100) // 启动多个工作线程 for w := 1; w <= 3; w++ { go worker(w, jobs, results) } // 向工作队列中添加任务 for j := 1; j <= 9; j++ { jobs <- j } close(jobs) // 读取结果队列中的结果 for a := 1; a <= 9; a++ { <- results } }
上の例では、ワーク キューと結果キューを使用します。初期化後、複数のワーカー スレッドを開始し、複数のタスクをワーク キューに追加しました。最後に、結果キューからすべての結果を読み取ります。このようにして、単純なスレッド プールを実装します。
つまり、Golang の goroutine は、非常に柔軟で強力な同時プログラミング モデルです。シンプルな「go」キーワードを使用することで、非常に簡単に goroutine を開始できます。実際のアプリケーションでは、さまざまなテクニックとパターンを使用して goroutine を合理的に使用し、高い同時実行性の操作を実現できます。
以上がGolang 関数の起動ゴルーチン実装のヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。