OpenHarmony ソースコード分析: 分散タスクスケジューリング (I)

OpenHarmony ソースコード分析: 分散タスクスケジューリング (I)

[[434413]]

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ

https://harmonyos..com

序文

HarmonyOS は、ローカル プログラムでのリモート タスクの呼び出しをサポートします。この機能は、下位レベルの分散タスク スケジューリング サブシステムによってサポートされており、オープン ソースの OpenHarmony コードに提供されています。分散タスク スケジューリング サブシステムをより包括的に理解し把握するために、分散リモート起動という単純な機能から始めて、Hongmeng のオープン ソース コードを使用して詳細な調査を行いました。

以下のテキストで特に指定がない限り、ここで言及されている Harmony システムは、オープン ソースの Harmony システム (OpenHarmony 3.0 LTS バージョン) を指します。


OpenHarmony アーキテクチャ図

概要

オープンソースの Hongmeng ドキュメントから始めましょう:

分散タスク スケジューリング モジュールは、マスター スレーブ デバイス サービス プロキシ メカニズムを通じて OpenHarmony オペレーティング システム上に分散サービス プラットフォームを確立し、マスター デバイス (OpenHarmony を搭載したスマート スクリーン デバイス) がスレーブ デバイス (IP カメラ、スポーツ ウォッチ、その他の小メモリ OpenHarmony デバイス) の FA を起動することをサポートします。

スマート スクリーンの番組開始リマインダーを例にとると、スマート スクリーンのお気に入り番組メニューで、[番組開始後にリマインダーを表示する] ボタンをクリックします。プログラムが開始すると、スマート スクリーンにスポーツ ウォッチのプログラム開始リマインダー FA が表示されます。この FA を通じて、ユーザーはお気に入りのプログラムが開始されたことをすぐに知ることができ、コラボレーションと相互支援の効果が得られます。

FA: 機能アビリティは、ユーザーと対話するために使用されるインターフェースを備えたアビリティを表します。

リモート スタート: デバイス間で FA を開始します。これは、ローカルで FA を開始することに対応します。

オープンソースの Hongmeng システム内のアプリケーションは、能力に基づいて FA と PA に分けられます。 FA はインターフェースを備えたアプリケーションであると簡単に理解できます。

分散サービスプラットフォーム

分散タスク スケジューリングの前提は、デバイスが分散サービス プラットフォームを確立し、独自の機能を登録する必要があることです。

オープンソースの Hongmeng は、軽量、小型、標準の 3 種類のデバイスをサポートしています。

標準デバイスでは、オープンソースの Hongmeng では分散サービス プラットフォームがデフォルトでオンになっており、開発者は通常、分散タスク スケジューリング機能を使用するために追加の作業を行う必要はありません。

軽量で小型のデバイスでは、スタートアップ コード自体に分散サービス プラットフォーム関数の呼び出しを実装する必要があります。詳細については、「分散ソフトバスサブシステム」を参照してください。関連するコードリポジトリと呼び出し API については、[Distributed Soft Bus]、[Distributed Soft Bus Lite] を参照してください。

同じLAN

上記のコード ウェアハウスの説明では、次の点が繰り返し強調されています。

検出エンドデバイスと検出対象エンドデバイスが同じLAN内にあることを確認する必要がある。

これは、オープンソースの Hongmeng システムは現在 coap プロトコルを使用しており、当面は coap プロトコルのみをサポートしているためです。ソースコードからもわかるように、今後はBLEやUSBなど他の方式にも拡張される予定です。

  1. /**
  2. * @brief サービスの公開使用されるBluetooth、Wi-Fi USBなどのメディアを列挙します
  3. *
  4. *現在メディア 協力する
  5. *
  6. */
  7. typedef列挙型{
  8. /** 自動メディア選択 */
  9. 自動 = 0、
  10. /** ブルートゥース */
  11. BLE = 1、
  12. /** Wi-Fi */
  13. 2,
  14. /** USB */
  15. USB = 3、
  16. } ExchangeMedium;

オープンソースの Hongmeng CoAP プロトコルで使用されるデフォルトのポートは 5684 で、UDP ブロードキャストを介してローカル エリア ネットワークに公開されます。デバッグ中にデバイスが見つからない場合は、このポートを介してパケットをキャプチャして分析できます。

  1. #COAP_DEFAULT_PORT 5684 を定義します

分散タスクスケジューリングプロセス

たまたま、オープンソースの Hongmeng 標準システムをサポートする開発ボード Hi3516D を 2 つ持っています。そこで、標準システムの分散タスク スケジューリングを例に、オープン ソース Hongmeng システムの分散タスク スケジューリング プロセスについて説明します。開発言語が異なることを除けば、軽量システムと小規模システムの基本的な手順は同じです。

オープンソースの Hongmeng システム開発 FA は現在、js/eTS 言語のみをサポートしています。

このデモは分散計算機を参照します。説明の便宜上、多くの簡略化が行われており、ここではエラー処理は無視されています。

特定の API リファレンス コード リポジトリ: DeviceManager コンポーネント。

ステップ1: デバイスマネージャーを作成する

  1. deviceManagerインポートする  '@ohos.distributedHardware.deviceManager' ;
  2.  
  3. 自分自身 = this とします。
  4. deviceManager.createDeviceManager( "com.example.myapplication" , (err, val)=>{self.deviceManager_ = val;});

DeviceManager 関連のインターフェースを使用する前に、createDeviceManager インターフェースを通じて DeviceManager インスタンスを作成する必要があります。

ステップ2: 信頼できるデバイスのリストを取得する

  1. var 配列 = this.deviceManager_.getTrustedDeviceListSync();

ステップ3: 周辺機器の動的監視用のコールバック関数を登録する

  1. this.deviceManager_ です。 on ( 'deviceFound' 、 (データ) => {
  2. extraInfo = {
  3. "targetPkgName" : 'com.example.myapplication' ,
  4. "appName" : '分散例' ,
  5. "appDescription" : 'シンプルな分散例' ,
  6. 「ビジネス」 : '0'  
  7. };
  8. authParam = {とする
  9. 「認証タイプ」 : 1,
  10. "アプリアイコン" : '' ,
  11. 「アプリサムネイル」 : '' ,
  12. "追加情報" : 追加情報
  13. };
  14. self.deviceManager_.authenticateDevice(data.device, authParam, (err) => { ... });
  15. });
  16. this.deviceManager_ です。 ( ' deviceStateChange' 、 (データ) => { ... });

ステップ4: 近くにある新しいデバイスを検出して認証する

  1. SUBSCRIBE_ID = Math.floor(65536 * Math.random());
  2. var 情報 = {
  3. 購読ID: SUBSCRIBE_ID、
  4. モード: 0xAA、
  5. 中: 2,
  6. 頻度: 2,
  7. isSameAccount: false
  8. isWakeRemote: true
  9. 能力: 0
  10. };
  11. this.deviceManager_.startDeviceDiscover(情報);

新しいデバイスを一緒に使用する前に、認証する必要があります。オープンソースの Hongmeng システムにはユーザー登録メカニズムがないため、認証には別の開発フレームワークのサポートが必要です。オープンソースの Hongmeng は、簡単に使用できるポップアップ PIN コード認証メカニズムをサポートするために、標準システムにシンプルな HAP プログラムを提供します。

現在のバージョンでは PIN コード認証のみがサポートされており、PIN コード認証には認証プロンプト インターフェイス、PIN コード表示インターフェイス、および PIN コード入力インターフェイスを提供する必要があります。

現在、システムにはネイティブ レイヤーを介してポップアップを直接表示する機能がないため、ここでは一時的な FA を使用して、対応するインターフェイスにポップアップを表示します。

FA は、システム アプリケーションとしてプリセットされている DeviceManager_UI.hap です。

具体的な動作は次のとおりです。

  1. リモートデバイスの画面に大きな6桁のPINが表示されます
  2. 制御装置はPINコード入力ウィンドウをポップアップします
  3. ユーザーはリモートデバイスに表示された PIN コードを制御デバイスに入力し、検証後にリモート制御を続行できます。
  4. PIN コードが正常に入力されると、デバイスは信頼できるデバイスとなり、システムに保存されます。次回接続するときに再度確認する必要はありません。

ステップ5: リモートでFAを呼び出す

上記の手順 1 ~ 4 は標準的な周辺機器管理手順であるため、後で使用するために関数ライブラリにカプセル化できます。

信頼できるデバイス配列を取得した後、適切なポップアップ ウィンドウまたは選択インターフェイスで、接続するデバイスの 1 つを選択するようにユーザーに求めることができます。

  1. findDevices:関数(){
  2. 自分自身 = this とします。
  3. this.remoteDevices.registerDeviceListCallback(() => {
  4. var リスト = 新しい配列();
  5. var devs = self.remoteDevices.deviceList;
  6. console.info( 'myapplication: リモートデバイスが更新されました、count=' + devs.length);
  7. (var i = 0; i < devs.length; i++)の場合{
  8. console.info( 'myapplication: デバイス ' + i + '/' + devs.length +
  9. ' デバイスID = ' + devs[i]. デバイスID + ' デバイス名 = ' + devs[i]. デバイス名
  10. + 'デバイスタイプ=' + devs[i].デバイスタイプ);
  11. リスト[i + 1] = {
  12. 名前: devs[i].デバイス名、
  13. 実行: devs[i].deviceId
  14. };
  15. }
  16. self.devList = リスト;
  17. });
  18. },

リモートFAを開始する手順:

  1. 機能能力をインポート  '@ohos.ability.featureability' ;
  2.  
  3. ......
  4.  
  5. 機能アビリティ.開始アビリティ({
  6. 欲しい:{
  7. バンドル名: 'com.example.myapplication' ,
  8. 能力名: 'com.example.myapplication.MainAbility'
  9. デバイスID: this.devList[idx].did、
  10. パラメータ:
  11. isFA: 'FA'  
  12. }
  13. }
  14. })。それから((データ)=>{
  15. console.log( "myapplication: 起動機能が終了しました:" + JSON.stringify(data));
  16. });

リクエストを受信すると、リモート デバイスは対応するパラメータを使用して対応する FA を起動し、起動時にパラメータを取得できます。

  1. 準備完了() {
  2. featureAbility.getWant((エラー、欲しい) => {
  3. console.info( 'myapplication: featureAbility.getWant =' + JSON.stringify(want.parameters));
  4. // ここでisFAは上記のリモートリクエストのパラメータです
  5. want.parameters.isFA の場合、 want.parameters.isFA === 'FA'となります。
  6. this.initKVManager(()=>{
  7. console.log( 'myapplication: kvmanager が起動しました。' )
  8. });
  9. }
  10. それ以外{
  11. this.findDevices();
  12. }
  13. });
  14.  
  15. },

具体的な API については、Huawei の Hongmeng 開発ドキュメントを参照してください。一部の内容はオープンソースの Hongmeng システムと異なる場合がありますのでご了承ください。ご自身で判断してください。

コンパイルして実行する

上記の手順は、DevEco Studio 3.0.0.600 x64 で正常に記述され、2 つの Hi3516D デバイス間で正常に実行されます。コード(配布されたリモートブート.zip)を添付します。

オープンソースの Hongmeng システムに HAP プログラムをインストールする場合は、まず署名し、DevEco Studio で関連する設定を行う必要があります。具体的な手順については、オープンソースの Hongmeng ドキュメントを参照してください。

HAP プログラムをアップロードしてインストールするには、開発ツール hdc を使用する必要があります。詳細についてはドキュメントを参照してください。

まとめ

オープンソースの Hongmeng システムの分散タスク スケジューリングの基本機能は当初から改善されていましたが、使用方法のドキュメントが比較的分散しており、サブシステムごとに参照する必要があり、少し不便です。

次のステップでは、分散ソフト バスと分散データについて学習し、オープン ソースの Hongmeng システムがアプリケーション間のデータ相互作用機能をどのようにカプセル化しているかを確認します。

また、ソースコードを見ると、オープンソースの Hongmeng システムにはすでに分散アプリケーションフロー (移行) 操作機能が搭載されており、時間があるときに学習することができます。

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ

https://harmonyos..com

<<:  クラウド、持続可能性、デジタル導入 - 2022 年のアジア太平洋地域の技術予測

>>:  ハイブリッド クラウドの 4 つのハイブリッド モードの特徴は何ですか?

推薦する

「Baidu 2012 Doomsday」から見る成功したイベントマーケティング

どの業界にもある程度の飽和度があります。業界の飽和度を超えると、現在の SEO のように業界は非常に...

minivps 1Gメモリ 4コア 月額7ドル データセンター3つ(オプション)

minivps は英国の VPS 販売業者であり、XAVVO のサブブランドです。Xavvo Ltd...

マルチテナントクラウドプラットフォームの導入方法を学ぶ

[[437680]] [51CTO.com クイック翻訳]パブリッククラウドを信頼できますか?答えは...

冬越し中のWeChatモーメントにご注意

10日前、「Win in China」の決勝戦を観ました。今でも一番鮮明に覚えているのは、ジャック・...

SEOトラフィックを収益化する方法

これは多くの人が遭遇する問題です。SEO を活用して成果を上げる方法も、インターネット上のトラフィッ...

GoogleがソーシャルネットワークOrkutを閉鎖

未読メールの中に「さようなら、Orkut」というメールがありました。内容は、Google がソーシャ...

ウェブサイト最適化事例: ウェブサイトのキーワードをどのように決定すればよいですか? - A5 Webmaster Network

ウェブサイト最適化の事例: ウェブサイトのキーワードをどのように決定すればよいですか? SEO とは...

中国本土の住民は米国株と香港株をどのように購入するのでしょうか?

国内資金が海外に投資する場合、最も人気のある投資市場は香港株と米国株です。多くの投資家は香港株に精通...

raksmartはどうですか? 「本土最適化回線」搭載韓国VPSの評価

raksmartはどうですか? raksmart 韓国 VPS はどうですか?韓国本土の最適化はどう...

外部リンクの詳細な分析

ウェブサイトのランキングを決定する多くの要素の中で、外部リンクは非常に重要な要素です。さらに言えば、...

業界のトレンドが徐々に上向きつつある中、国内の SaaS 代替はどのようにして普及していくのでしょうか?

最近、SMICを含む数十の中国企業が米国の「エンティティリスト」に掲載され、これらの企業は米国の技術...

Windows Server のインストールと構成 IIS8.5 チュートリアル

Windows サーバーで IIS8.5 を構成するためのステップバイステップ ガイドを以下に示しま...

onevps: 日本のハイブリッドサーバー、350Mbps 保証帯域幅、2Gbps バースト、無制限トラフィック、Windows システム、Alipay 搭載

今週月曜日、onevpsは新しい「ハイブリッドサーバー」を発売しました。オプションのデータセンターは...

reliablesite: ビデオ、ゲーム、レンダリングなどに適した、I9-9900K およびその他の高周波マルチコア サーバー。

ビデオ サーバー、ゲーム サーバー、レンダリング GPU サーバーなどはすべて、高周波数の CPU ...

コンテナセキュリティ管理のベストプラクティスの実装

Docker と Kubernetes テクノロジーの成熟に伴い、コンテナは現在最も注目されている開...