Goを探玢する理由は䜕ですか

みなさんこんにちは Keval Patelによる蚘事グラフを含むの翻蚳を玹介したす。なぜGoを孊ぶ必芁があるのですか。 この蚘事には、新参者が孊ぶために圹立぀ず思う倚くの興味深い事実が含たれおいたす。



PSこの蚘事は、私の意芋では、ほずんどの蚘事ず同様に、著者の経隓ず意芋を反映しおいたすが、これはあなたの意芋ず䞀臎しない堎合がありたす。

ホリネズミ






kirael-art.deviantart.com/art/Go-lang-Mascot-458285682から撮圱した画像



「Goは未来のサヌバヌ蚀語になりたす。」-TobiasLÃŒtke、Shopify


過去数幎にわたっお、新しいプログラミング蚀語であるGoたたはGolangが倧きく成長したした。 同意しお、新しいプログラミング蚀語のように開発者を狂わせるものは䜕もありたせん。 したがっお、4〜5か月前にGoの孊習を開始したした。これが、この新しい蚀語を孊習する理由に぀いお説明できるこずです。



この蚘事では、「Hello world !!」の曞き方を教えたせん。 これに関する他の倚くの蚘事がありたす。 コンピュヌタヌのハヌドりェアず゜フトりェアの珟状ず、Goのような新しい蚀語が必芁な理由を明確にしたす。 結局のずころ、問題がなければ、解決策は必芁ありたせんよね



鉄の制限



ムヌアの法則は機胜したせん。



3.0 GHzのクロック呚波数を備えた最初のPentium 4プロセッサは、 2004幎にIntelによっお導入されたした。 今日、私のMacbook Pro 2016のクロック速床は2.9 GHzです。 したがっお、玄10幎間、玔粋なコンピュヌティング胜力の進歩はほずんどありたせんでした。 䞋のグラフでは、時間の経過に䌎う蚈算胜力の増加の比范グラフを芋るこずができたす。



蚈算胜力の成長の比范タむムラむン



グラフから、シングルスレッドのパフォヌマンスずプロセッサ呚波数がほが10幎間安定しおいるこずがわかりたす。 トランゞスタを远加するこずが良い解決策だず思うなら、あなたは間違っおいたす。 これは、より小さなスケヌルでオブゞェクトの量子特性が珟れるようになるためですトンネリング、[ たたはトンネル効果。-およそTransl。 ]など 。 1ドルで远加できる額は急速に枛少し始めおいたす。



したがっお、䞊蚘の問題を解決するには、





ただし、䞊蚘の゜リュヌションにも制限がありたす。 キャッシュには物理的な制限があるため、プロセッサにさらにキャッシュを远加するこずはできたせん。キャッシュが倧きいほど遅くなりたす。 プロセッサにコアを远加するこずにも代償が䌎いたす。 さらに、これを無期限に行うこずはできたせん。 これらのマルチコアプロセッサはすべお、同時に耇数のスレッドを実行でき、これにより、画像のマルチタスク凊理が可胜になりたす。 これに぀いおは埌で説明したす。



したがっお、ハヌドりェアの改善に頌るこずはできないため、この状況から抜け出す唯䞀の方法は、より効率的な゜フトりェアを䜿甚するこずです。 しかし、残念ながら、珟代のプログラミング蚀語はそれほど効果的ではありたせん。



「最新のプロセッサは、ニトロで満たされた楜しい車のように芋えたす-四分の䞀マむルのレヌスでは玠晎らしいです。 残念ながら、モンテカルロトラックのような最新のプログラミング蚀語は、twist䜙曲折に満ちおいたす。」-David Ungar


Goにはゎルヌチンがありたす!!



前述のように、ハヌドりェアメヌカヌは、パフォヌマンスを向䞊させるために、プロセッサにコアを远加しおいたす。 すべおのデヌタセンタヌはこれらのプロセッサヌで皌働しおおり、今埌数幎でコアの数が増えるず予想されたす。 さらに、最新のアプリケヌションは倚くのマむクロサヌビスを䜿甚しお、デヌタベヌス接続、メッセヌゞキュヌ、およびキャッシュをサポヌトしおいたす。 したがっお、私たちが開発する゜フトりェアずプログラミング蚀語は、マルチタスク 同時実行性-およそTransl。 を簡単にサポヌトする必芁があり、コア数の増加に合わせおスケヌラブルでなければなりたせん。



しかし、ほずんどの最新のプログラミング蚀語Java、Pythonなどは、90幎代のシングルスレッド開発環境に由来しおいたした。 これらの蚀語のほずんどはマルチスレッドをサポヌトしおいたすが、実際の問題は同時実行、スレッドブロッキング、競合状態、およびデッドロックです。 これらのこずから、䞊蚘の蚀語でマルチスレッドアプリケヌションを䜜成するこずは困難です。



たずえば、Javaで新しいスレッドを䜜成するず、メモリの䜿甚効率が䜎䞋したす。 各スレッドはヒヌプから玄1MBのメモリを消費するため 動的に割り圓おられたメモリ。-箄Transl。 、その結果、数千のスレッドを実行するず、メモリに倧きな圧力がかかり、その䞍足によりアプリケヌションがシャットダりンする可胜性がありたす さらに、2぀以䞊のスレッドが互いに通信するようにしたい堎合、これを行うのは非垞に困難です。



䞀方、Goは、マルチコアプロセッサが既に利甚可胜であった2009幎にリリヌスされたした。 これが、Goがマルチタスクを念頭に眮いお䜜成された理由です  同時実行性-およそTransl。 。 Goはスレッドの代わりにゎルヌチンを䜿甚したす。 ヒヌプからほが2KBのメモリを消費したす。 したがっお、少なくずも䜕癟䞇ものゎルヌチンをい぀でもスクロヌルできたす。



ゎルヌチンはどのように機胜したすか






ゎルヌチンはどのように機胜したすか 詳现 golangtutorials.blogspot.in/2011/06/goroutines.html



その他の利点





Rob Pikeの優れたパフォヌマンスを芋るこずができたすが、このトピックをより深く理解するために、 マルチタスクは䞊行凊理ではありたせん 。


䞊蚘のすべおの点により、GoはJava、C、C ++ず同じようにマルチタスクに非垞に匷力であるず同時に、Erlangのようにコヌドの矎しさず自然さを保ちたす。



マルチタスクず効率のスケゞュヌル

Goには、䞡方の長所が組み蟌たれおいたす。 曞きやすく、マルチタスクで効果的



Goはハヌドりェアで盎接実行されたす。



Java / Pythonのような最新の蚀語の代わりにC / C ++を䜿甚する最も重芁な利点の1぀は、そのパフォヌマンスです。 C / C ++はコンパむルされおいるため、解釈されたせん。



プロセッサはバむナリコヌドのみを理解したす。 原則ずしお、Javaたたは他のJVMベヌスの蚀語でアプリケヌションを䜜成する堎合、プロゞェクトをコンパむルするずき、人間が読み取れるコヌドからバむトコヌドにコンパむルされたす。これは、JVMたたはOS䞊で実行される他の仮想マシンで理解できたす。 実行されるず、VMはこのバむトコヌドを解釈し、プロセッサが理解できるバむナリコヌドに倉換したす。



JVMベヌスのコヌドステヌゞ

JVMベヌスのコヌドステヌゞ



䞀方、仮想マシンを䜿甚しないC / C ++があるため、䞊蚘の図から1぀のステップを削陀しながら、生産性を高めるこずができたす。 人間が読めるコヌドをバむナリに盎接コンパむルしたす。



バむトコヌドにコンパむル段階がない堎合のコヌド実行の段階

しかし、これらの蚀語の倉数をクリヌンアップしお配垃するのはただ苊痛です。 同時に、ほずんどのプログラミング蚀語は、ガベヌゞコレクタヌず参照カりントアルゎリズムを䜿甚しおオブゞェクトの配垃ず削陀を凊理したす。



Goは䞡方の長所を吞収したした。 C / C ++などの䜎レベル蚀語のように、Goはコンパむルされた蚀語です。 これは、䜎レベル蚀語ず同様のパフォヌマンスを意味したす。 たた、オブゞェクトを配垃および削陀するための独自のガベヌゞコレクタもありたす。 さらにmallocおよびfree  かっこいい



Goで蚘述されたコヌドは保守が簡単です。



䞀぀お話ししたしょう。 Goには、他の蚀語のような狂った構文はありたせん-すべおが非垞にきれいできれいです。



GoogleのGoogle開発者は、䜜成時にこれを念頭に眮いおいたした。 Googleには巚倧なコヌドベヌスがあり、数千人の開発者が䜜業しおいるずいう事実により、コヌドは他の開発者が理解しやすく、1぀のコヌドが他のサむトに最小限の副䜜甚をもたらすはずです。 これにより、コヌドの保守ず倉曎が容易になりたす。



Goには、意図的にOOP蚀語の倚くの機胜が含たれおいたせん。





䞊蚘の倉曎により、Goは他の蚀語ず区別されるため、他の蚀語でのプログラミングずは異なり、Goでのプログラミングが可胜になりたす。 䞊蚘のポむントのいく぀かが気に入らないかもしれたせん。 しかし、これは、これらの機胜なしではアプリケヌションを䜜成できないずいう意味ではありたせん。 あなたがしなければならないのは、2〜3行だけ曞くこずです。 ただし、その䞀方で、コヌドがよりわかりやすくなり、理解しやすくなりたす。



コヌドの可読性ずパフォヌマンスのグラフ

コヌドの読みやすさずパフォヌマンス。



䞊蚘のグラフは、GoがC / C ++ずほが同じくらい効率的であり、Ruby、Python、および他の蚀語ず同じ単玔な構文を持っおいるこずを瀺しおいたす。 これはwin-winオプションです win-win。-およそRem。 人にずっおもコンピュヌタヌにずっおも



Goの構文は非垞に安定しおいたすが、 他の新しいSwift蚀語ではそれほど安定しおいたせん。 2012幎のバヌゞョン1.0の公開リリヌス以降、構文は倉曎されおいたせん。 これにより、䞋䜍互換性が埗られたす。



GoはGoogleによっおサポヌトされおいたす。





結論






All Articles