0
내 응용 프로그램에 많은 양의 데이터를 써야합니다. 데이터는 주기적으로 도착하여 대기열로 푸시됩니다.파일에 데이터를 쓰는 가장 효율적인 방법은 무엇입니까?
//producer
queue_.push(new_data);// new_data is a 64kb memory range
PostThreadMessage(worker_thread_id_, MyMsg, 0, 0);//notify the worker thread
그 후,이 데이터를 파일에 기록해야합니다. 큐에서 데이터를 가져 와서 쓰는 다른 스레드가 있습니다.
//consumer
while(GetMessage(msg, 0, 0))
{
data = queue_.pop();
WriteFile(file_handle_, data.begin(), data.size(), &io_bytes, NULL);
}
이것은 간단하지만 효율적이지 않습니다. 또 다른 중요한 점은 IO 완료 포트를 사용하는 것입니다.
//producer
//file must be associated with io completion port
WriteFile(file_handle_
, new_data.begin()
, new_data.size()
, &io_bytes
, new my_overlaped(new_data));
소비자는 사용되지 않은 버퍼
my_completion_key* ck = 0;
my_overlapped* op = 0;
DWORD res = GetQueuedIOCompletionStatus(completion_port_, &io_bytes, &ck, &op);
//process errors
delete op->data;
선호하는 방법은 윈도우에서의 I/O 작업 파일의 많은 양을 수행하기 위해, 무엇
을 삭제한다?