0

clamAV 署名データベースを使用してウイルス スキャナーをコーディングするプロジェクトが必要です。速度を上げるために、スレッドを使用します。(コンボ & 待機) 私のコードのしくみ:

フォルダーとサブフォルダー内のすべてのファイルを読み取ります

function recursive_files()
{
files=$(find $folder_path -type f)
for f in $files
do
    raw_and_scan "$f" &
done
wait
}

ご覧のとおり、各ファイルにはスレッドがあります。

function raw_and_scan()
{
raw_test_file $1
read_signature_db_by_line $1
}

Read_signature.. 署名データベースの各行を読み取ります

    function  read_signature_db_by_line()
    {
    cat $signature_path | (while read LINE ; do
        stringtokenizer_line_db $LINE $1 $raw_file &
    done
    wait
    )  }

ご覧のとおり、DB の各行にはスレッドがあります。

大きなパフォーマンスが見られたので、ダブルスレッドの実装を行いました(時間ベンチマークを使用)

50行の50ファイルをDBにスキャンすると。それは正常に動作します。

しかし、ホーム フォルダ (800 個のファイル) をスキャンしても機能せず、さらに悪いことに、警告が表示され (もう fork() を実行できません)、コンピュータがフリーズします。再起動する必要があります。

5000タスクが動作するまでプロセス(htop)を監視します。

私のプロジェクトを提出できますhttps://github.com/peondusud/Bash.antivir

最後に、65000 行のデータベースを含むフォルダーをスキャンします。

スレッドなどを制限する考えがある場合。

ありがとう。

4

1 に答える 1

1

1 つのプロセス (スレッドではない) から 2 つのプロセスへの大幅な改善が見られるという事実は、5000 プロセスを使用して超高速になるという意味ではありません。実際には逆です。集中的な作業を行うプロセスを計画している場合は、システム内の CPU コア数を 2 倍に制限する必要があります (これは一般的な経験則です)。

于 2012-11-11T12:09:53.140 に答える