Многопоточное чтение файла - C#
Формулировка задачи:
Здравствуйте. Есть задача: читать большой файл блоками в x байт и потом с этими блоками что-то делать. Процессы чтения и делания нужно распараллелить, при этом сделать так, что б все работало быстро и оптимально. Делать все нужно при помощи thread'ов. Подскажите, пожалуйста, я правильно понимаю алгоритм:
1) создаем потоков по числу процессоров.
2) один поток направляем на чтение файла. Файл он должен считывать в некий буффер (что выбрать в качестве такого буфера? массив, лист или еще что-то?). что делать когда буфер заполнен? поток нужно усыплять и активизировать как только буфер освободится?
3)остальные потоки заставляем читать буфер и делать нужную им работу.
все так?
Решение задачи: «Многопоточное чтение файла»
textual
Листинг программы
- class BuffersPool
- {
- private Stack<byte[]> _buffers = new Stack<byte[]>();
- private object _locker = new object();
- public BuffersPool(int bufferSize, int count)
- {
- for (int i = 0; i < count; i++)
- {
- _buffers.Push(new byte[bufferSize]);
- }
- }
- public byte[] WaitForBuffer()
- {
- lock (_locker)
- {
- while (!_buffers.Any())
- {
- Monitor.Wait(_locker);
- }
- return _buffers.Pop();
- }
- }
- public void PutBack(byte[] buffer)
- {
- lock (_locker)
- {
- _buffers.Push(buffer);
- Monitor.Pulse(_locker);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д