Gtk-vnc
ソフトウェアの構成は、大まかに言って、3つに分かれている。一つは、examples/gvncviewer.cであり、VNC viewerのメインルーチンである。次は、GTK-VNC widgetとなるsrc/vncdisplay.cである。最後は、vnc_coroutine()@src/vncdisplay.cから呼び出されるsrc/gvnc.cというVNCのネットワーク通信プロトコル層である。このvnc_coroueine()は、メインとは別スレッド(コルーチン)として稼働している。 また、ソフトウェア規模は、1万行程度であり、比較的小さい。
動作は、2つのスレッドが、交互に動く形になっている。1つは、グラフィックインターフェースのメインスレッドであり、もう1つはネットワーク通信のvnc_coroutine()である。 vnc_coroutine()は、coroutine_yieldでCPUを離し、メインスレッドにCPUを譲る。そして、I/O割り込みが上がったり、メインスレッドの処理が一段落しCPUが空くなどのある一定条件を満たすと、coroutine_yieldto()が実行され、メインスレッドからCPUを奪う過程を繰り返す。