EPUBファイルを解析したいのですが、ファイルをメモリに読み込んだ後、コンテンツを解析する必要があります。この本には10以上の章があるかもしれません。各章のNSOperationインスタンスを作成し、すべてCPU計算で同時実行を実行しました。
それぞれ5つのチャプターを処理する2つのスレッドを用意する必要がありますか、それともそれぞれに10のスレッドを用意する必要がありますか?どちらがより効率的ですか?デバイスが異なれば戦略も異なりますか?
EPUBファイルを解析したいのですが、ファイルをメモリに読み込んだ後、コンテンツを解析する必要があります。この本には10以上の章があるかもしれません。各章のNSOperationインスタンスを作成し、すべてCPU計算で同時実行を実行しました。
それぞれ5つのチャプターを処理する2つのスレッドを用意する必要がありますか、それともそれぞれに10のスレッドを用意する必要がありますか?どちらがより効率的ですか?デバイスが異なれば戦略も異なりますか?
それぞれ5つのチャプターを処理する2つのスレッドを用意する必要がありますか、それともそれぞれに10のスレッドを用意する必要がありますか?どちらがより効率的ですか?
あなたがすべきことは、おそらく2つか3つのスレッドとキューを持つワーカープールを作成し、各スレッドにキューから一度に1つのタスクをプルさせて実行させることです。ワーカースレッドの数は、デバイスのコアの数に比例する必要があります。(実際の最適な数は、処理タスクがI / Oを実行する必要があるかどうかによって異なります。これにより、しばらくの間スレッドがブロックされる可能性があります...)
各チャプターにスレッドを作成すると、リソース(スレッドスタック)が消費され、高速化されません。スレッドが実際に異なるコアで並列に実行できる十分な物理コアがある場合にのみ、スピードアップが得られます。
チャプターをスレッドに事前に割り当てることはお勧めできません。これは、一方のスレッドにもう一方のスレッドよりも大幅に小さいワークロードを割り当てる可能性があるためです。
実際、各チャプターの処理にかかる作業量を安価に見積もることができれば、単純なキューよりもスレッド間でワークロードをスケジュールする方が適切な場合があります。しかし、努力する価値があるかどうかは議論の余地があります。