後押し:: ASIOはそれを吸いますか?

私たちは、ほとんど悪いデザイン(使用しない)、または腐っそれがコーディングを指しASIO腐ったかわからない、使用していないが、私はソースコードを読んでいない、答え/承認の感触がASIO吸う多くの大規模な牛を参照してください知っていますか?

私たちは、ほとんど悪いデザイン(使用しない)、または腐っそれがコーディングを指しASIO腐ったかわからない、使用していないが、私はソースコードを読んでいない、答え/承認の感触がASIO吸う多くの大規模な牛を参照してください知っていますか?

ASIOは非常によく書かれました!なぜこれほど多くの人々は、その理由は単純で、それは良好なパフォーマンスはないと言うん。例としてASIO所与の標準、それは、分散コールバックを使用して単一のマルチスレッドRUNのコンテックス、コンテックスであってもよいです。このモデルのIOCPは、インタフェースは、システムのAPIであるため、各スレッドがロックを待機する必要はありませんイベントの完了を待っている、窓、ほぼ完璧に実装します。キューを保護するための唯一の必要性をロックします。Linuxプラットフォームでは、ファイルディスクリプタのシミュレーションを使用して、コンテックスの呼び出しで結果を直接、複数のスレッドが大きなロックがあるでしょう実行中にロックします。実際には、マルチスレッドの実行が走行を切り替え、別のスレッドで、パフォーマンスはしませんでした。しかし、Linuxプラットフォーム、あなたは、習慣を変更するために使用する接続を取得するコンテックスで受け入れ、[コンテックスプール、プールの実行中にスローされた接続処理を確立することができます。epollモデルは、それがあったことができ、デフォルトと一致しています。電話でのタイピングを詳細に言うことではない、いくつかの簡単な特性が言いました。関数呼び出しを扱うときASIOは、作者の性能が要求されて表示され、頻繁にコールバック配分とメモリの最適化のリリースのスレッドローカルストレージを使用しています。ASIOキューは、非常に単純なリンクリスト構造であるので、塔は実際にコンテンツの重要な面積が小さい行うロックするだけでなく、かなり良い最適化。最後に、実際に達成するためのコードテンプレートのASIO自身のクロスプラットフォーム、大量に連結されたサーバーは通常のLinuxプラットフォーム、、、ASIOコードを読むために多くのない大物、彼らの結論のように多くは信頼性がないかもしれません。私たちは、この練習が不可欠です知っている必要があります。良いコードまたは見て、学ぶことを学ぶことは良いです。あなたは、ASIO純粋なシングルスレッドのイベントCライブラリ、C ++マルチスレッドライブラリイベントを比較し、コントラストlibuvことができます。私はそれがとても理解しやすいと思います。私はASIOの悪口を言わなければならない理由は誰もが、悪いlibuv性能を言いませんでしたか?おそらくそれは本当に不親切なバーコードので。

私は差し挟むてみましょう:簡単ではありませんが、あなたは、クロスプラットフォームの非同期ネットワークライブラリをパッケージ化するために、経験豊富なC ++プログラマをさせた場合、アカウントに機能を取って書くことASIO、パフォーマンス、リソース管理、マルチスレッド、彼はそうですASIOと同じ道を行くが、必ずしもうまくASIOていません。あなたが期待することはできません、また、複雑なコードを記述すると、これらの問題は常に問題と絡み合ってきた。その理由は、C10K問題のために非常に同時の非同期モデルのパフォーマンスを、選択するために(そうでない場合、なぜあなたは同期モデルを作成していない)、ということです初心者分にこれらの点は、それを取得しますか?任意のライブラリでは?単にテレビ、テレビを見て困難に、テレビは離れて内側にも非常に複雑です。これは必然的にのみ簡素化する方法を見つけるために、世界を複雑。ASIOは非常に良いです。

後押しASIOは非常に良い面があり、例えば、すべてのオペレーティングシステムと互換性があり、その上、答えは右、すでに比較的完全の前にある、と私たちはマクロを完全に理解しているように、いくつかの腐った場所を追加する必要があります:1)複数の文字列を送信ASIO Linuxでの機能の向上には、少なくとも2017 ubuntu1604自身のブーストASIOのバージョンは、直接の崩壊を持つものを使用することはできません、バグがある実現しています。そして、後で解決のLinux専用のマルチセンドを書き直しました。ハッカーの攻撃モード、十分に安定していない:シングルバイトの伝送ハッカーがハードステッチを攻撃2)の直後にクラッシュ。非常に同時、接続を確立した後、他の当事者が繰り返し接続を構築し、その後、いくつかのランダムな送信ハードステッチ、すなわちTCP RST / IPではなく、ノーマルクローズのために待っていれば、次のシナリオでクラッシュを書く/ ASIO非非同期読み取りを後押し攻撃の手段を実現することができます。ブーストASIOクラッシュので、バックトレースはread_some機能で停止しました。以降のLinux専用read_someを書き直し、解決write_some、読み、解決するための関数を記述Linuxの直接呼び出しがあります。3)ハードステッチ攻撃、互いにハードステッチとバックヒットしないとすることができます。ASIOの設定オプションを変更する例によれば、他の状態でのみハードステッチた場合、サーバは、ハードステッチを準備攻撃を受け、ハードステッチを使用した場合ASIO高め、その後、近くに、クラッシュの特定の可能性があります。ソリューション、のみノーマルクローズを許可していないハードステッチ、。4)新しい接続の多数が攻撃を受けてデッドロック。試験方法の再現性:HTTPネイティブAB -kパラメータを使用して構築されたブーストASIOサーバ、またはテストの2つ以上のグループを有する、即ち、ステッチは、一度すべてのHTTP接続が構築され、一度だけの後に接続された各トランシーバ、予めは、IF標準のHTTP応答のconstのstdにパックするのに十分小さく見えるの準備ができ:: 文字列内の、その後の処理のために十分に速く、そしてサーバ・コードが複数のスレッドを有効にのみio_serviceのCPU、単一io_service接続の数に等しい数の各スレッドio_serviceドライブ、マルチio_serviceのそのような構造は、書き込みテストを開始し、実際のメインリードすべての新しい接続が来ていないの後ろasync_accept、高い同時実行ABテストのボトルネックは、数分以内にデッドロックがあるだろう、async_acceptに死亡しました。溶液は、シングルスレッドマルチスレッド、他方はio_serviceのasync_acceptのLinuxバージョンを書き換えることであるだけではありません。まあ、今のシステムが安定している、あなたはすべての補強問題をやったが、あなたは三つの主要なアクションを書き、読み、接続書き換えられている、ハッカーの攻撃ブーストASIOネットワーク・サーバの下、または自分自身に崩壊することはできませんそれを強化します。

彼は、オペレーティングシステムを消去する基盤となるネットワークライブラリの違いを置くと、ヘルプが汚い仕事をたくさんやった、これは非常に軽い自慢です。非同期ライブラリと同時に、多くの複雑な状況をioの過半数強制機会のニーズを満たすことができます。もちろん、それは大規模な同時ケースを適用するときに発生する可能性があり、または非同期アプリケーションは、より一般的なシーンに延長されるなど、パフォーマンスの問題など、いくつかの欠点は、曲のうちのビットを思えています。実際には、これはASIO自体に完全に起因しない、結局のところ、それはお尻に残さオペレーティングシステムと言語そのものなので、ライブラリはそれを少し抵抗をこします。あなたはそれがみんな何より良い方法を批判する人たちにお願いしたいが、最終的にどこでも強いかは選択肢を持っているかどうか、良かったかも?

彼は、オペレーティングシステムを消去する基盤となるネットワークライブラリの違いを置くと、ヘルプが汚い仕事をたくさんやった、これは非常に軽い自慢です。非同期ライブラリと同時に、多くの複雑な状況をioの過半数強制機会のニーズを満たすことができます。もちろん、それは大規模な同時ケースを適用するときに発生する可能性があり、または非同期アプリケーションは、より一般的なシーンに延長されるなど、パフォーマンスの問題など、いくつかの欠点は、曲のうちのビットを思えています。実際には、これはASIO自体に完全に起因しない、結局のところ、それはお尻に残さオペレーティングシステムと言語そのものなので、ライブラリはそれを少し抵抗をこします。あなたはそれがみんな何より良い方法を批判する人たちにお願いしたいが、最終的にどこでも強いかは選択肢を持っているかどうか、良かったかも?

性能と機能から、黒を持っていませんでした。極端に腐ったビューの開発者の視点から、。APIの使い勝手は可読性が、コードの可読性を呼び出す書かASIOに基づいて、高い天をカスタマイズし、拡張するために行うには困難で、その結果、ゼロであること、また維持することは非常に困難非常に悪く、0です。最近、同社のネットワークサービスフレームワークは、基本的な部品、技術選択を行うには、人々は、実際には全体OO文言Cですが、最終的には圧力なしに読み取ることができる最も単純なクラスのCPPの考えとCに従って、libuv--選びました。唯一の数十人は、静的公式は、基本、サンプルコードと等しくない場合でも、唯一の百K、I / Oを、イベントループはすべてを備えてすべての非同期、すべてが腐ったヘッダファイルAPI、APIドキュメントまで追加をコンパイルされたファイル関係なく、ヒープ文言のピットの父の裏側の、まだすぐに始めることができます。それをASIO?ああ。

彼は静的ポリモーフィズムの様々なサポート、ASIO ASIO腐ったネットワークとしては、図書館で見ている、実際にはASIO未来をサポートするためのイベントフレームワーク、および拡張性の高い、などのスケーラブルなシミュレーション俳優モデルとして、パイプラインモデルであることを特徴とします、非同期シリアル通信は、カスタム部分のスケジューラ機能、スタック/スタックレスのサポートは、このようなパイルサポートとして物事をコルーチン。ASIOより複雑なシンプルなネットワークライブラリよりもASIOネットワークのみ偶発機能、。

オリジナル住所:https://www.zhihu.com/question/42159518

おすすめ

転載: blog.csdn.net/qq_23350817/article/details/96424191