4D-JUG
Would you like to react to this message? Create an account in a few clicks or log in to continue.

WebプロセスはWORKERプロセスではない?

2 posters

Go down

WebプロセスはWORKERプロセスではない? Empty WebプロセスはWORKERプロセスではない?

投稿 by yokota 2017-05-12, 1:18 pm

v15R5以降プリエンプティブなプログラミングができるようになったおかげで、それまでは遅すぎて断念していたデイトレ用のリアルタイムの株価分析を実現することができました。Mac miniの4コアですが、実感として4倍早くなったような気がします。
今後はコアがたくさん詰まった高いWindowsマシンを買うことでプログラムを変更することなくさらに高いパフォーマンスが期待できます。

そのプログラミングに慣れてくると、これまで多用していたインタープロセス変数やGET/SET PROCESS VARIABLEなどを意識的に避けるようになるのですが、WORKERプロセスの特徴は理解しているものの、実際にはそれらを使用しなければならなくなる場面に遭遇する場合があります。

その一つが4D Remote modeのクライアントから「サーバ上で実行」チェックボックスをオンにしたメソッドの中にCALL WORKERを仕込み、そのWORKERプロセスからコールバックさせてプロセス変数の値を得ようとしても値は得られず、結局WORKERプロセスからGET PROCESS VARIABLEで取って来ざるを得ませんでした。

もう一つはクライアントからのRESTでWORKER、メソッド、パラメータを指定して実行させ、元のWebプロセスにコールバックさせてクライアントに返そうとしたのですが、これもダメで、WORKERプロセスからSET PROCESS VARIABLEを行うことになりました。

上記を行う理由はCALLするWORKERプロセスのプロセス変数に様々な情報を集積させているからです。
新しいWORKERを立ち上げる際にコピーしても良いのですが、Webプロセスの場合はそうも行きません。COMPILER_WEBメソッドを使えばなんとかなるかとも思ったのですが、それもWebプロセスの中ですから同じことでした。

CALL WORKERで作成されたプロセスはコールバックも含めプロセス間のメッセージのやりとりができます。大変便利です。
しかし4Dが作成するストアードプロセスやWebプロセスはWORKERプロセスではないのでしょうか。
それとも他に方法があることを見落としているのかもしれません。
もしかしたら、コールバックのタイミングを外しているかも。

Webプロセスもプリエンプティブとなったので、上記くらいの部分では大勢に影響はないことを百も承知しながら、色々と試している今日この頃です。

yokota

投稿数 : 13
登録日 : 2017/04/28

トップに戻る Go down

WebプロセスはWORKERプロセスではない? Empty Re: WebプロセスはWORKERプロセスではない?

投稿 by miyako 2017-05-16, 9:49 am

まず,

ワーカー != プリンプティブプロセス

という点に留意する必要があると思います。

ワーカーは特殊なプロセスです。
ワーカーを開始するにはCALL WORKERを実行します。
それ以外のプロセスでは唯一,アプリケーションプロセスだけがワーカーです。

New  process, Execute on server, 「新規プロセス」メニュー項目は,いずれもワーカーではない,通常のプロセスを開始します。

ワーカー・プロセスともに,プリエンプティブモードで開始するかどうかは,
コンパイル時の条件
- メソッドのプロパティ
- データベース設定(Webプロセスの場合)

開始時の条件
- Unicodeモード
- 64ビット
- クライアント側ではない

によって決まります。

ですので,

4Dが作成するストアードプロセスやWebプロセスはWORKERプロセスではないのでしょうか。

はい。ワーカーではありません。CALL WORKERで開始していないからです。
しかし,条件が満たされていれば,プリエンンプティブモードで開始することができます。

New  process, Execute on server,Webプロセスなど,ワーカーではないプリエンプティブプロセスは,CALL WORKER/CALL FORMを実行することはできても,その対象となることはできませんので,外部からプロセス変数等を読み取ることができません。ポインター・オブジェクト・DOMなどの『参照』を介しても,空の値が返されます。プリエンプティブプロセスは,他のプロセスとオブジェクトを共有することができないからです。

そのようなワーカーではないプリエンプティブプロセスと通信する手段としては,データベース(レコード)を使用するのがもっともシンプルかもしれません。

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

WebプロセスはWORKERプロセスではない? Empty Re: WebプロセスはWORKERプロセスではない?

投稿 by yokota 2017-05-16, 12:56 pm

やはりプリエンプティブにこだわればレコードでのやり取りなのでしょうね。
クライアントサーバ時の制御やメッセージ伝達のためにパラメータテーブルを用意していますが、消滅しないWORKERプロセスを知ってからは、必要な場合はプロセスをキープしながらメソッドを実行させるスタイルが大変シンプルなので気に入っていました。

CALL WORKERで作成したプロセス以外のプロセスは今後メッセージボックスがつくようになるのでしょうか。
現在は、新しいコンセプトの下に用意されたCALL WORKERコマンドとこれまで形のプロセスが共存しているわけですから、シンプルに統一されることは必然のような気がします。

yokota

投稿数 : 13
登録日 : 2017/04/28

トップに戻る Go down

WebプロセスはWORKERプロセスではない? Empty Re: WebプロセスはWORKERプロセスではない?

投稿 by Sponsored content


Sponsored content


トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可