I need to transfer huge amount of data between Java and C++ programs under Linux(CentOS). Performance is the first concern. What will be the best choice? RAMDisk (/dev/shm/) or local socket?
1
There are 1 answers
Related Questions in SOCKETS
- Node.js Server + Socket.IO + Android Mobile Applicatoin XHR Polling Error...?
- My server TCP doesn't receive messages from the client in C
- how is strncpy able to copy from source to empty destination?
- Python Multicast packet receiver stops receiving multicast packets when computer is connected to WiFi
- Python Client-Server Communication with Protocol
- Reversed TLS re-connection issue
- Android 13 & 14 seem to close WebSocket connection, if i put app in background, after ~20s
- Java SocketException: Connection reset,. What is the cause?
- Multipart/form-data with chunked data transfer (ICAP protocol)
- View Socket View
- Client connection timeout during Android & Windows PC communication via sockets
- Browser connect to raw sockets even possible?
- Protocol 43200 after unpacking received data
- Unity SocketIo using Best http2 plugin want to use in webgl
- How does pre-allocating a pool of SocketAsyncEventArgs objects upfront improve the performance of a server application in c#
Related Questions in IPC
- Communicate/transfer data between two different programs. JAVA & VERILOG
- Update a reactive value in a function
- How many senders and receivers of a notification are possible in a POSIX message queue
- gRPC for communications between three separete processes
- Python multiprocessing Queue: performing get() is a bottleneck
- How can Java write commands to the GHCi?
- Electron ipcRenderer import causing error with in webpack project
- FreeRTOS Callback vs. Queue
- Python question - Communicating Between Multiple Instances of the Same Application? IN WINDOWS OS
- How can I handle multiple (compound) commands in a command server program?
- How to create an unordered_map in shared memory without boost?
- IPC between Android app and native user space process
- Filemapping between python and c++: File not found
- Parent-child IPC on Windows using Python and custom file descriptors
- Difficulty formatting xml file in Perl
Related Questions in RAMDISK
- Tips for GIT versioning Linux RAM Disk Image (ramdisk.gz) contents
- Is there a Windows Docker containers eqivalent to tmpfs volumes?
- missing ramdisk in boot.img for Android 13
- How to save tensorflow models in RAMDisk?
- Fast multi-part file merge on Linux
- Storing PDF in RamDisk vs MemoryMappedFile
- Running a Streamlit script encounters OSError: [WinError 1] Incorrect function
- Linux initrd optimization
- Spark: Provide input data as file to external executable
- It is not possible to pack Android 12 Automotive AVD with provided scripts
- Getting a custom ramdisk to boot on Android
- RAMdisk reads seem to be no faster than hard disk (HDD) reads
- RAM disks in GCP Dataflow - is it possible?
- How to make a whole docker container volatile?
- Building ionic angular app fails when built from teamcity but succeeds every where else
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
A socket is fastest because the other end can start processing the data (on a separate cpu core) before you have finished sending data.
Say you're sending 100KB of data, the other end can begin processing as soon as it recieves a couple of kilobytes. And by the time all 100KB has been sent, it has probably finished processing 90KB or thereabouts, so it only has 10KB left.
While with a RAM disk, you have to write the entire 100KB before it can even start processing data. Making it about 10x faster to use a socket than a ram disk, assuming both ends need to do about the same amount of work.
Maybe it takes 1 millisecond to write 100KB to a RAM disk and then 1 millisecond to process it. With a socket it would take 1 millisecond to send the data but only 0.1 millisecond to finish processing after all the data has been sent.
The larger the amount of data being sent, the bigger the performance gain for sockets. 10 seconds to write all the data, and another 0.1 millisecond to fnish processing after all data has been sent.
However, a RAM disk is easier to work with. Sockets use streams of data, which is more time consuming in terms of writing the code and debugging/testing it.
Also, don't assume you need a ram disk. Depending on how the operating system has been configured writing 100MB to a spinning platter hard drive might simply write it to a RAM cache and then put it on the hard drive later on. You can read it from the temporary RAM cache immediately without waiting for the data to be written to the HDD. Always test before making performance assumptions. Do not assume a HDD is slower than RAM, because it might be optimised out for you silently.
The mac I'm typing this on, which is UNIX just like CentOS, currently has about 8GB of RAM dedicated to holding copies of files it guesses I'm going to read at some point in the near future. I didn't have to create a RAM disk manually, it just put them in RAM heuristically. CentOS does the same sort of thing, you have to test it to see how fast it actually is.
But sockets are definitely the fastest option, since you do not need to write all the data to start processing it.