読者です 読者をやめる 読者になる 読者になる

ポジローぽけっと

昨日より今日、今日より明日を信じて、トライトライ

第十六回スパルタンプログラミング

何がしたいか?何が問題か?を意識して変なとこでぐだぐだ考えないこと

30分悩んで分からなかったら、早めにヘルプを出す。

やりたいこと

macosxでsocketに対してaio_readが動作しないので、socket fdをfcntlでNONBLOCKにしselectでさばく方針に戻る(りたい?)。

(なんか、大分遠回りをしたような。。プログラムの調べ方とかが分かったので、よしとしよう。)

またsocketはマルチスレッドで扱いたい。

マルチスレッドでどうやる?

マルチスレッドを使い、

  1. listen socket(クライアントがconnectかけるポートと対応)を扱うスレッド
  2. acceptの実行、それにより生成されるsocketを扱うスレッド

に分けて実装してみようと思う。

最初は2.のaccept実行を1.でやろうと考えていたのだけれど、生成されるfdの管理がスレッド間にまたがると競合が起きると想像した。

競合すると、mutexを使わなければならず煩雑で嫌だー!(アクセスが多い場合にボトルネックになりそうだ)と思い、上記でやろうと思う。

懸念点は?

同一socketを複数スレッドのacceptで監視することは可能なのか?という懸念が残るが、 Can I call accept() for one socket from several threads simultaneously?を読むと何やらいけそう。

メモ:Grand Central Dispatchについて