次のチュートリアル コラムでは、golang のコルーチンについて紹介し、説明します。それが必要な友人の役に立てば幸いです。
コルーチンはアプリケーション層のスレッドです。アプリケーション層は、カーネル層に対するオペレーティング システムの概念であり、CPU の動作レベルに対応します。オペレーティング システムのコア コードはリング 0 レベルで実行され、アプリケーション コードはリング 3 レベルで実行されます。カーネル層とアプリケーション層の間のレベル設定により、一部の高特権操作はカーネル コードによってのみ実行できるようになります。これらの機能を使用するには、アプリケーションはオペレーティング システムの API (Linux ではシステム コールと呼ばれます) を呼び出してカーネル コードを呼び出す必要があります。この呼び出しにより、CPU はリング 3 からリング 0 にコンテキストを切り替えます。この切り替えにより、CPU 時間がいくらか消費されます。
スレッドはオペレーティング システムのカーネル オブジェクトです。マルチスレッド プログラミング中に、スレッドが多すぎると、頻繁にコンテキストの切り替えが発生します。これらの CPU 時間は追加のコストとなります。したがって、一部の高度に同時実行されるネットワーク サーバー プログラミングでは、1 つのソケット接続に 1 つのスレッドを使用するのは賢明ではありません。したがって、オペレーティング システムは、イベント パターンに基づいた非同期プログラミング モデルを提供します。少数のスレッドを使用して、多数のネットワーク接続と I/O 操作を処理します。ただし、非同期およびイベントベースのプログラミング モデルを使用すると、プログラム コードの作成が複雑になり、エラーが非常に発生しやすくなります。スレッドがインターリーブされるため、エラーのトラブルシューティングも難しくなります。
コルーチンはアプリケーション層でシミュレートされるスレッドであり、コンテキスト切り替えの余分なコストを回避し、マルチスレッドの利点を考慮しています。同時実行性の高いプログラムの複雑さを簡素化します。たとえば、同時実行性の高いネットワーク サーバーでは、各ソケットが接続され、サーバーはコルーチンを使用してサービスを提供します。コードは非常に明確です。そしてパフォーマンスも考慮されます。
それでは、コルーチンはどのように実装されるのでしょうか?原理はスレッドと同じで、スレッド a がスレッド b に切り替わるとき、スレッド a の関連する実行進行状況をスタックにプッシュしてから、スレッド b の実行進行状況をスタックにプッシュする必要があります。スタックからポップアウトする必要があるため、b の実行シーケンスを入力します。コルーチンはこれを達成するために適用されるだけです。 ただし、コルーチンはオペレーティング システムによってスケジュールされず、アプリケーションには CPU スケジューリングを実行する機能や権限がありません。この問題をどうやって解決すればいいでしょうか?
答えは、コルーチンはスレッドベースであるということです。内部実装に関しては、一連のデータ構造と n 個のスレッドが維持されます。実際の実行は依然としてスレッドです。コルーチンによって実行されるコードは実行されるキューにスローされ、これらの n 個のスレッドはキューから引き出されます。実行。これにより、コルーチン実行の問題が解決されます。では、コルーチンはどのように切り替わるのでしょうか?答えは次のとおりです: golang はさまざまな io 関数をカプセル化します。これらのカプセル化された関数はアプリケーションに提供され、オペレーティング システムの非同期 io 関数を内部で呼び出します。これらの非同期関数がビジーまたはブロッキングを返すと、golang はこの機会を利用して既存の実行シーケンスがプッシュされます。これにより、スレッドが別のコルーチンのコードを取得して実行できるようになり、オペレーティング システムの非同期関数を使用してカプセル化することが基本原理となります。 Linux の epoll、select、Windows の iocp、event などが含まれます。
golang はコンパイラと言語ベース ライブラリの複数のレベルからコルーチンを実装するため、golang のコルーチンは、コルーチンの概念を持つさまざまな言語の中で最も完全で成熟した実装です。
10 万個のコルーチンを同時に実行してもプレッシャーはありません。重要なのは、このようなコードは書かないということです。しかし、全体として、プログラマーは Golang コードを作成する際に、ビジネス ロジックの実装により集中することができ、これらの主要な基本コンポーネントに費やすエネルギーを減らすことができます。
以上がgolang のコルーチンについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。

go语言叫go的原因:想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物,它的中文名叫做囊地鼠,它们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。

本篇文章带大家了解一下golang 的几种常用的基本数据类型,如整型,浮点型,字符,字符串,布尔型等,并介绍了一些常用的类型转换操作。

是,TiDB采用go语言编写。TiDB是一个分布式NewSQL数据库;它支持水平弹性扩展、ACID事务、标准SQL、MySQL语法和MySQL协议,具有数据强一致的高可用特性。TiDB架构中的PD储存了集群的元信息,如key在哪个TiKV节点;PD还负责集群的负载均衡以及数据分片等。PD通过内嵌etcd来支持数据分布和容错;PD采用go语言编写。

go语言需要编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言,也就说Go语言程序在运行之前需要通过编译器生成二进制机器码(二进制的可执行文件),随后二进制文件才能在目标机器上运行。

在写 Go 的过程中经常对比这两种语言的特性,踩了不少坑,也发现了不少有意思的地方,下面本篇就来聊聊 Go 自带的 HttpClient 的超时机制,希望对大家有所帮助。

删除map元素的两种方法:1、使用delete()函数从map中删除指定键值对,语法“delete(map, 键名)”;2、重新创建一个新的map对象,可以清空map中的所有元素,语法“var mapname map[keytype]valuetype”。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ドリームウィーバー CS6
ビジュアル Web 開発ツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ホットトピック



