tommieです。

(2013/04/10 12:44), Shigeki Ohtsu wrote:
> 大津です。
>
>
> まだ worker 内の sleep(1) に依存した実装になってますよね。
> (sleep(1) を外すと uv_async_send() が正常に動作しなくなる)

sleep()なしでも正しく動くように直しました。
だいぶゴテゴテになってしまいました。w

https://gist.github.com/open-tommie/5342559


> これ、 sleep(1) を入れないと、イベントループが io poll で call back を処
> 理する前に各スレッドが async fd を上書きしちゃうからだと思います。(ちゃ
> んと調べてないですが)

uv_async_tはスレッド毎に必要なようです。
1つのuv_async_tを重複して使っていたのが原因でした。
スレッド毎に用意したら正しく動きました。

> 先に述べたよう uv_check() を使った実装だとこんな感じになります。
> (これは worker 内に sleep(1) は必要ないです)
>
> https://gist.github.com/shigeki/5351299

uv_check()を使ったほうがスッキリしてますね。
uv_check()は イベント処理毎に設定した関数を呼び出すのですね、なるほど。
全イベント処理毎に呼ばれるのでしょうか?


アドオン化して、Node.jsコールバック関数も呼び出せました。
多少、整理して近いうちに投稿します。

-- 

--- 
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。


メールによる返信