68user's page 掲示板

Prev< No. 994〜1004> Next  [最新発言に戻る] [過去ログ一覧]
No. 994 # Netboy 2000/07/21 (金) 13:55:51
NFS上のファイルをflockすると,複数マシンから
同時にロックできてしまう(場合がある)と思いますが...

Perlで普通にflockを使っていると,たいがい
まともにロックできないうえ処理速度が遅くなります.

open (LOCK, "> $file")||&error
flock (LOCK,2)||&error

とか書いた時点で終わってます.2箇所直せば使えますけど
普通そんなこと気付きません.
あと,デッドロックの発生を検知するのが難しいです.

No. 995 # いち 2000/07/21 (金) 19:14:34
68userさん>

御回答ありがとうございました。
僕のメーラーはemacsのrmailなので、受けとれないみたいですね。
文章の添付ファイルならば、その文章は一応表示されますが。

それで、御紹介頂いた Mew と Wanderlust のHPに行ってみたのですが、
その2つの違いというものがよく解りません。
よろしければ教えて頂けますか。
用途は、添付ファイルを受けとるだけなので、それに適しているのは
どちらなのかというのも教えて頂けると嬉しいです。

あと、もう一つ質問なのですが、
あるファイルのシンボリックリンクを作った時に、
そのシンボリックリンクの元となるファイルから、
そのファイルのシンボリックリンクがどこに作られているかを
見つけ出す事はできますか?

なんか解りにくい文章ですみません。

No. 996 # 68user 2000/07/22 (土) 13:34:09
> それで、御紹介頂いた Mew と Wanderlust のHPに行ってみたのですが、
> その2つの違いというものがよく解りません。
両方ともメーラーなわけで、できることは自然と似てきます。
一応僕の思う特徴をあげると
    Wanderlust のいいところ
    ・見栄えがきれい (スクリーンショット参照)
    ・IMAP4 対応
    ・ニュースリーダの機能もある

    Mew のいいところ
    ・im と mew を入れるだけなので、インストールが簡単
        (Wanderlust だと semi やら apel やら入れて、さらに
        それぞれのバージョンにも気をつけなくてはいけない)
てな感じ。インストールに自信がないなら Mew の方がいいかも
しれません。

ちなみに「添付ファイルを受け取る」という一点に関して言うと、
Mew の方が使いやすいように感じます。

> そのファイルのシンボリックリンクがどこに作られているかを
> 見つけ出す事はできますか?
無理です。全ファイルを調べるしかないです。これはハード
リンクも同じです。

> NFS上のファイルをflockすると,複数マシンから
> 同時にロックできてしまう(場合がある)と思いますが...
んー、なるほど。複数マシンからの flock というのは全く
思いつきませんでした。一つの NFS クライアントマシンから
flock して、「ああ、NFS でもうまくロックできるのね」と
思ってました。

試してみたいけど、NFS 環境がないなぁ・・・

No. 997 # hum 2000/07/22 (土) 16:42:52
はじめまして。
勉強になるのでちょくちょく見させてもらっています。

crypt化した文字を復元することはできるのですか?

No. 998 # hum 2000/07/22 (土) 16:52:27
申し訳ないです。先ほどの追加です。

crypt化するのにperlでやっています。

#!/usr/bin/perl

$A ="AAAAAA"; #←crypt化する文字
$B ="BB"; #←KeyWord
print crypt ($A,$B);

No. 999 # 68user 2000/07/22 (土) 21:10:41
> crypt化した文字を復元することはできるのですか?
できないです。復元ができないようなアルゴリズムを採用している
からです。なので、辞書を使ったり、総当りで調べるしかありません。

ちなみに keyword じゃなくて salt と言います。

No. 1000 # mm@biglobe 2000/07/23 (日) 23:37:53
unixはぜんぜん知らないのですが、
flockに関しては以前から疑問があったので、
ちょっとお伺いします。

>とか書いた時点で終わってます.2箇所直せば使えますけど
>普通そんなこと気付きません.
open の時点で $file が破壊されるってことですね。
これは、確かにしっかりしたドキュメントが必要だと思います。

>あと,デッドロックの発生を検知するのが難しいです.
flock でデッドロックが発生したら、意味ないのでは…?
flock がセマフォを使ってるのか、別の何かを使ってるかは知りませんが、
デッドロックを回避できるからこそ flock の価値があるんではないでしょうか?
それとも、セマフォとかの待ち行列の状態が検知できないという意味でしょうか?

>Perlで普通にflockを使っていると,たいがい
>まともにロックできないうえ処理速度が遅くなります.
こういう文章を読んで、flockはダメだと勝手に判断して、
もっと酷い、訳の分からない排他制御手段を考える人が出て来るような気が…

ただ、flockを使えばOSが対象ファイルごとに待ち行列を
用意することになるんでしょうから、チャット等が沢山使われるサーバーでは、
リソースを大量に消費して、レスポンスも悪くなるような気はします。
先のプロバイダの制限は、そういうことを嫌ったのではないでしょうか?

No. 1001 # Netboy 2000/07/24 (月) 04:32:13
>open の時点で $file が破壊されるってことですね。
はい,あと引数'2'だと,待っている間何も出来なくなるので
マズイ,ということで2箇所...としました.
シグナル起こしはあてにならないということで.

>デッドロックを回避できるからこそ flock の価値があるんではないでしょうか?
デッドロックは起きます.
flockには価値なんかありません.BSDでの互換性だけです.
言葉遊びでなく,確率というか危険度と考えてください.

flockして成功したプロセスが無限ループに入ったとき,
解除にはたいがいプロセス殺しが必要です.うまく殺せるか
どうかは不確実なので,この時点でデッドロックといえます.
symlinkやmkdirでの排他処理だとまだ通常のファイル操作で済みます.

>それとも、セマフォとかの待ち行列の状態が検知できないという意味でしょうか?
はい,検知と制御ができません.同じ意味でfcntlやセマフォも
使うのは難しいです.OSリソースを隠れて消費し,工夫しないと
システム全体の速度が低下します.

OSに付属する排他処理機構を,よく検証せずに使うのはまずいです.

私の経験だと,
- いつどのプロセスが何をロックして
- それを参照する何個のプロセスがどれくらいの時間待機しているか
外から判るようにしなければだめな感じです.

>訳の分からない排他制御手段を考える人が出て来るような気が
他人の手法を参考のうえ,排他処理の仕組みを自分で考えるのは
結構なことだと思います.

No. 1002 # mm@biglobe 2000/07/24 (月) 22:32:46
>解除にはたいがいプロセス殺しが必要です.うまく殺せるか
>どうかは不確実なので,この時点でデッドロックといえます.
なるほど、もし解除できないということが起こるなら、
確かにデッドロックですね。
unixを触ったことがないため、そのヘンは、何となくシステムを
信頼していました(^^;

>flockには価値なんかありません.BSDでの互換性だけです.
う〜ん、それが現状だとすると、問題ありそう…

>言葉遊びでなく,確率というか危険度と考えてください.
確かに、私の先の書き込みは、スパゲッティを食べる哲学者のレベルでの
話かも知れません(^^;

>OSに付属する排他処理機構を,よく検証せずに使うのはまずいです.
検証する能力がない人間が下手なことをするよりは、
システムが用意した機能をそのまま利用した方がマシ、
というスタンスでいたのですが、少なくともflockに関しては、
考え直さないといけないみたいですね。

>symlinkやmkdirでの排他処理だとまだ通常のファイル操作で済みます.
今後は、作成時からの経過時間検査による解除機能付きsymlink/mkdirあたりで
検討してみたいと思います。

>他人の手法を参考のうえ,排他処理の仕組みを自分で考えるのは
>結構なことだと思います.
これは、あくまでもっと低次元の話です。
「他人の手法」を正確に理解し、問題点を的確に把握した上で、
「自分で考える」のであれば、仰る通りすばらしいことだと思います。

No. 1003 # 68user 2000/07/25 (火) 00:31:46
Netboy さんは、ノンブロッキングの flock なら OK、
という立場ですよね?

で、いくつか疑問があります。

> flockには価値なんかありません.
fcntl には価値がある、という話でしょうか。それとも
両方価値がない、という話ですか?

> flockして成功したプロセスが無限ループに入ったとき,
という状況って、起こり得ますか? (現象事態は
root が SIGSTOP 送れば容易に発生しますが)

Netboy さんは、どういうプログラムを想定しておられます?
ちなみに僕が考えたのは、カウンタとか web BBS とかです。

> Perl で普通にflockを使っていると,たいがいまともに
> ロックできないうえ処理速度が遅くなります.
僕の環境では「まともにロックできない」というのは
経験したことはありません (1000回カウントアップしたつもりが、
カウンタデータファイルを見ると998回しか実行されていない
というのはあった。原因は不明)。

それと flock は、symlink・mkdir よりは速かったです。
しつこいですが、僕の環境では、です。

# あと、排他処理はいつも symlink でやるので、flock を
# 使いこんだことはないです。

> 訳の分からない排他制御手段を考える人
http://www2q.biglobe.ne.jp/~terra/cgi/lockfile.htm (笑)

No. 1004 # mm@biglobe 2000/07/25 (火) 00:56:39
>http://www2q.biglobe.ne.jp/~terra/cgi/lockfile.htm (笑)
あはは、どもです。どこだったか忘れてました。

Prev< No. 994〜1004> Next  [最新発言に戻る] [過去ログ一覧]