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 つのハイブリッド モードの特徴は何ですか?

推薦する

再度更新:最も安いVPS、10年間の経験を共有し、海外の安いVPSに関する情報をまとめました

私は多くの安価な VPS を使用しましたが、その中にはかつて「最も安い VPS」と考えられていたもの...

OVH スーパーハイディフェンス VPS: シンガポール、シドニー、半額プロモーション、2.88 ドルから

OVH のアジア太平洋データセンターの VPS がセール中です: シンガポール VPS、オーストラリ...

李佳琦が「淘宝網」に進出?

李佳奇はWeChatミニプログラムに新しいビジネス「屋台」を開設した。最近、李佳琦のライブ放送室の公...

タオバオO2Oがウェディング業界に参入した経緯を分析

はじめに:ジャック・マー氏の「地元の生活サービスは5時か6時の太陽であり、商品電子商取引よりも規模が...

リンクだけでなく、マーケティングソフト記事の役割も

Yue Zhixuan 氏の「リンクのためだけではなく、ソフトテキストの書き方の品質を無視することは...

ssdnodes - $48/年/4 コア/4g メモリ/40g SSD/4T トラフィック/10g ポート/ダラス

SSD Nodes, Inc は、米国デラウェア州に登録された会社で、登録番号は 5098270 で...

ゲーム運営とは何かを徹底的に理解できる記事です。

ゲーム運営は、退屈ではありますが、非常に重要なポジションです。ゲームのドル箱とプレイヤーのベビーシッ...

インタラクティブなディスカッション: ユーザーシナリオと製品ニーズに基づいた設計

【編集後記】この記事の著者は @wbuild です。記事では、デザイナーの成長過程を3つの段階に分け...

実店舗の売上を伸ばす10の方法

月給5,000~50,000のこれらのプロジェクトはあなたの将来ですマーケティングは企業の収益性の鍵...

zgovps: 安価な日本の VPS、年間 29.9 ドル、IIJ 回線、1G メモリ/1 コア (Ryzen9 7950X)/20G NVMe/700G トラフィック

zgovpsは、IIJ回線を標準搭載し、800Mbpsの帯域幅、最新の超高性能AMD Ryzen9 ...

はじめに: bandwagon、banwagonhost、bandwagonhost vps 公式サイト

bandwagon は、中国における bandwagonhost の略称です。bandwagonho...

Hosteons VPSはどうですか? Dallas AMD Ryzen+NVMe シリーズのレビュー

ホストオンはどうですか?ホストは良いですか? Hosteons の AMD Ryzen+NVMe に...

Nutanix、2019年のエンタープライズクラウドインデックスレポートを発表、企業のハイブリッドクラウドへの移行を支援するために協力

ハイパーコンバージェンスからスタートし、中国市場にハイパーコンバージェンスを成功裏に導入したNuta...

ramnode-VPS 全面的に40%オフ、最高の割引

Ramnode は設立され、現在では格安 VPS リストで 2 位にランクされています。安定性と G...