Многопоточное чтение файла - 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д