blog.fuktommy.com

マルチスレッドが楽しい

朔のアクセスがとんでもないことになっているらしい」の件ですけど、 一応解決できたみたいです。 以前は更新通知(/update命令)が来たとき、こんなことしてました:

  1. フラグが立ってたら待つ。待ってもフラグが立ったままなら終了。
  2. フラグが立ってなかったら立てる。
  3. 更新の処理をする。
  4. 処理に失敗したらフラグを降ろす。

どういうことかというと、作業中フラグと作業終了フラグが同じものだったんです。 なので、既に作業終了だから終わってよいのか、 作業中なのでそれが失敗したときのために待つべきなのか、 判断がつかなかったのです。 それで既に作業が終了しているときは50秒も待たせてました。

今はこんな感じです:

  1. 作業終了のフラグが立ってたら終了。
  2. そうでなければキューに入れて終了。

キューの仕事はこんな感じ:

  1. 更新の処理をする。
  2. 処理に成功したらフラグを立てる。

キューの仕事は更新通知が来たときと、あとは定期的に行われます。 これで待機スレッドの数は大幅に減ったはず。

Copyright© 1998-2014 Fuktommy. All Rights Reserved.
webmaster@fuktommy.com (Legal Notices)