It is always difficult to give accurate answers just by looking at the system, but have you really tried to check the actual bandwidth?
As a first solution, I would simply recommend using a dedicated drive (so there are simultaneous read / write actions from other processes) and fast. Thus, it will be only a small cost of upgrading the equipment, and we all know that hardware is usually cheaper than software;) You can even switch to a RAID controller for maximum throughput.
If you are still limited by disk bandwidth, there are new technologies out there using Flash technology: USB keys (although this may not seem very professional), or "new" solid state drives can provide more bandwidth than mechanical drives.
Now, if the approach to disks is not fast enough or you cannot get good SSDs, you have other solutions, but they are related to software changes, and I suggest them from the top of my hat.
- Approach to the socket: the second utility listens on the port, and you send data there. On a local computer, this is relatively fast, and you also parallelize the work, so even if the size of the data grows, you will still start to process pretty quickly.
- Approach to memory mapping: write to the selected area in live memory and read this utility from this area ( Boost.Interprocess can help, there are other solutions).
Note that if the reading is sequential, I find it more βnaturalβ to try the βpipeβ approach (ala Unix) so that both processes run simultaneously. In a traditional handset, data may not get to disk at all.
Shame, is it not true that in this age of overwhelming computing power we are still struggling with our IO drive?
Matthieu M.
source share