並行プログラミング・分散オブジェクト

ソケットなどのネットワークプログラミング、分散オブジェクト (主にCORBA)、リモートプロシージャコール (RPC) などを扱います。

並行、並列、分散はこんな感じでしょうか。

並行 (concurrent)
論理的に複数のタスクが同時に動く。逐次の対義語。時分割などで擬似的に実現されているかもしれない。
並列 (parallel)
複数のCPU (コア) で同時に複数のタスクを動かす
分散 (distributed)
複数のシステム(コンピュータ)で複数のタスクを同時に動かす

文書

omniORBのインストール
[2017-05更新] C++ / Python に対応した CORBA ORB.
CORBA again
[2017-05更新] 異なるプログラミング言語の間でRPC. 生き残っている.
ORBit2
GNOMEのCORBA ORB、ORBit2の使いかた. ※ORBit2はすでに廃れている。例えば, omniORB は現在も維持されている。
CORBA ORBインターフェイス
CORBA仕様で定義されるORBのインターフェイス
Rubyで分散オブジェクト (dRuby)
Ruby標準のpure RubyなORB、dRubyの使いかた
Bonobo components
GNOMEの分散コンポーネント技術Bonoboの使いかた
IPv6ソケットプログラミング
IPv4/IPv6両対応のプログラムの書き方。
スレッドプログラミング (pthread)
UNIXでのスレッドプログラミング。
MPICH2のインストール
クラスタ環境の用意。

RMI接続実験

 Java専用の分散技術RMI (Remote Method Invocation) のテスト。

 CORBAと同様,Linux機(JDK 1.1.6)とWindows機(JDK 1.2)の接続ができない。これがマシンを跨ぐのに失敗してるからか,バージョン間で互換性がないからかは不明。エラーメッセージからは後者のよう。

minichat

 ソケット非同期通信のテスト。サーバーはLinux,クライアントはWindows, Linux, Java版を用意した。

 Java版はスタンドアロン,アプレットのいずれとしても動作し,JDK 1.2 on Windows, JDK 1.1.6 on Linux, Netscape Navigator 4.5 on Windowsで確認した。Internet Explorer 4.0, Netscape Navigator 4.07 on Linuxでは動かなかった。IEで動かなかったのは,かなり謎。

 Java版をアプレットとして動かすとき,ユーザー名,サーバーのポート番号を決め打ちしてる(*1)ので,ソースを修正しないといけない。また,Javaアプレットはダウンロード先のホストとしか通信できないので,.classファイルをWebサーバーに置く。

 エンコーディングの変換をしてないので,異なるOS間では日本語は通らない。Linux版はEUC-JP, Windows版はShift_JISでいいんだが,Java版が難しい(*2)。

Note.

(1999.08.09追記) Windowsでの標準エンコーディングはシフトJISではない。ISO/IEC 646 IRVとJIS X 0208をエンコードした「932」。

*1: アプレットからダイアログボックスを出す方法,あるいはgetlogin()に相当する方法が分からなかった。

*2: 標準のエンコーディングがMS932, ISO8859_1, SJISと多様で,どの環境でも使えるエンコーディング,又は実行時に使えるエンコーディング一覧を取得する方法がない。Javaは内部UnicodeなのにUTF-8を指定したらJava2 VM以外例外を投げるし。自前でUTF-8変換すればいいが,今度はLinux版でiconv()がないため,EUC-JPとエンコーディング変換する標準的な方法がない。あぅ。