ewmscp  ..
Public Member Functions | Private Attributes | List of all members
copyRequest::base::writeActor Class Reference
Collaboration diagram for copyRequest::base::writeActor:
[legend]

Public Member Functions

 writeActor (std::unique_ptr< outputHandler::base::writer > &writeHandle, blockQueue &blocksToWrite, blockQueue &writtenBlocks, bool mayParallelize, base *request, exceptionList &exceptions)
 
 ~writeActor () noexcept(false)
 
bool joinable () const
 

Private Attributes

std::vector< std::thread > workers
 
blockQueueoutputQueue
 

Detailed Description

Definition at line 244 of file copyRequest.h.

Constructor & Destructor Documentation

◆ writeActor()

copyRequest::base::writeActor::writeActor ( std::unique_ptr< outputHandler::base::writer > &  writeHandle,
blockQueue blocksToWrite,
blockQueue writtenBlocks,
bool  mayParallelize,
base request,
exceptionList exceptions 
)

Definition at line 625 of file copyRequest.cpp.

630  :
631  outputQueue(writtenBlocks) {
632  if (noCopy) { // do nothing
633  return;
634  }
635  unsigned nBlocks = request->readInitialStat->size / request->memoryBlockSize;
636  if (mayParallelize
637  && request->nConcurrentProcesses < nThreads / nWriteThreads + 1
638  && writeHandle->parallelizable()
639  && nWriteThreads > 1
640  && nBlocks >= nWriteThreads) {
641  workers.resize(nWriteThreads);
642  for (auto& worker : workers) {
643  worker = std::thread(&copyRequest::base::writeWorker, request,
644  std::ref(writeHandle),
645  std::ref(blocksToWrite),
646  std::ref(writtenBlocks),
647  std::ref(exceptions));
648  }
649  } else {
650  workers.push_back(std::thread(&copyRequest::base::writer, request,
651  std::ref(writeHandle),
652  std::ref(blocksToWrite),
653  std::ref(writtenBlocks),
654  std::ref(exceptions)));
655  }
656 }

References copyRequest::base::memoryBlockSize, copyRequest::base::nConcurrentProcesses, noCopy, nThreads, copyRequest::base::nWriteThreads, ioHandle::parallelizable(), copyRequest::base::readInitialStat, workers, copyRequest::base::writer(), and copyRequest::base::writeWorker().

Here is the call graph for this function:

◆ ~writeActor()

copyRequest::base::writeActor::~writeActor ( )
noexcept

Definition at line 657 of file copyRequest.cpp.

657  {
658  if (workers.empty()) {
659  return;
660  }
661  for (auto& worker : workers) {
662  worker.join();
663  }
665 }

Member Function Documentation

◆ joinable()

bool copyRequest::base::writeActor::joinable ( ) const

Definition at line 666 of file copyRequest.cpp.

666  {
667  return !workers.empty();
668 }

Referenced by copyRequest::base::doThreadedCopy().

Here is the caller graph for this function:

Member Data Documentation

◆ outputQueue

blockQueue& copyRequest::base::writeActor::outputQueue
private

Definition at line 246 of file copyRequest.h.

◆ workers

std::vector<std::thread> copyRequest::base::writeActor::workers
private

Definition at line 245 of file copyRequest.h.

Referenced by writeActor().


The documentation for this class was generated from the following files:
noCopy
options::single< bool > noCopy
waitQueues::simple::size
decltype(queue.size()) size() const
Definition: waitQueues.h:99
copyRequest::base::writeActor::outputQueue
blockQueue & outputQueue
Definition: copyRequest.h:246
nThreads
static options::single< unsigned > nThreads('n', "nThreads", "number of threads", 0)
copyRequest::base::writeActor::workers
std::vector< std::thread > workers
Definition: copyRequest.h:245
copyRequest::base::writer
void writer(std::unique_ptr< outputHandler::base::writer > &writeHandle, blockQueue &blocksToWrite, blockQueue &writtenBlocks, exceptionList &exceptions)
Definition: copyRequest.cpp:592
copyRequest::base::nWriteThreads
static options::single< unsigned > nWriteThreads
Definition: copyRequest.h:130
waitQueues::simple::signalDone
void signalDone()
Definition: waitQueues.h:49
copyRequest::base::writeWorker
void writeWorker(std::unique_ptr< outputHandler::base::writer > &writeHandle, blockQueue &blocksToWrite, blockQueue &writtenBlocks, exceptionList &exceptions)
Definition: copyRequest.cpp:610
ioHandle::parallelizable
virtual bool parallelizable() const
tell if this handler is capable of parallel IO. Unsually not the case
Definition: ioHandle.h:38