技術メモグリーンスレッドの実装を考えていたらいつの間にかタイトルのようなことをやっていた。実装した全部載せはリポジトリに置いてあるので、何を考えたかを吐き出す。クライアントからの読み込みと書き込み間でコンテキストが発生する通信のサーバーの実装を考える。ループを使う場合、一つのクライアントとの読み書きを終えるまで次のクライアントとは何もできない。処理ではブロックするし、同期的に全ての読み書きが処理される。来るのを待つことになる。同期的な処理を改善する。単位で独立していれば非同期にできる。ループを実行する方法がある。よっても違いは生じる。適切にロックを入れることによって実行順序やデッドロックを考慮する必要がある。後に再度有効になるなど、多少は考慮する点がある。立ち上げておくものを実装した(つまり全部)。一応コネクション数には上限を設けている。thread(process)別に見てみると、単一なクライアントとの処理を全て終えるまで他のクライアントに関する処理は行っていない。無効であれば待ちが発生するためブロックされている。状態によって全体がブロックされるのを防いでいることである。thread(process)な状態で適用する方法は色々あるが、以下の方針を取ることにした。thread(process)は複数のクライアントと同時にやり取りを行うようになる。よる個別のブロッキングを避けるため、待ちの状態が発生しなくなり、効率的に読み書きを行うことが可能になる。thread(process)間で同期的に行う必要があった*1。ここが今回のハマりポイントで、気がつくまで結構時間を取られた。入れなければならなかった。必要になるなど、本末転倒。受け渡しを行うために行っている。受け取るが、もちろん子プロセスでは有効なはずはない。この辺は全然理解せずに使用したので、いつかまた仕組みを詳しく見たい。していなくて、実際は固定の文字列を返しているだけである。構造体メンバのdata.ptrにポインタを入れるだけなので楽といえば楽)。performance今回は特に計測を目的としていないが、一応どれほど違いがあるのかについて計測は行った。