Я использую общую память (с семафором) для связи между двумя процессами:
Во-первых, я открываю объект общей памяти, используя вызов:
int fd = shm_open("name") [http://linux.die.net/man/3/shm_open]
Во-вторых, я отображаю этот общий объект mem в свое адресное пространство, используя call:
void* ptr = mmap(..fd..) [http://linux.die.net/man/2/mmap2]
Тем не менее, я хочу использовать EPOLL в сочетании с дескриптором файла совместно используемой памяти ==> Я больше не использую mmap, а вместо этого использую EPOLL для мониторинга, а затем добавляю функцию записи для прямого доступа к разделяемой памяти, используя fd (shared memmory) дескриптор файла)
Мой вопрос таков: как скорость прямого чтения и записи в объекте с общей памятью по сравнению с memcpy для указателя, возвращаемого mmap?
read(fd, buffer) vs memcpy(des, source, size) //???
Надеюсь увидеть ваш ответ! Спасибо!
read
является системным вызовом и подразумевает переход привилегий, который подразумевает манипулирование адресным пространством (MMU), и тогда ядро вызовет memcpy
из предоставленного вами буфера на адрес назначения. Это в основном то же самое, что вы бы сделали (позвоните memcpy
), но добавив 2 дорогие операции (переходы привилегий) и дешевую (поиск адреса назначения).
Мы можем сделать вывод, что read
/write
очень вероятно, будет медленнее.
Других решений пока нет …