скорость чтения и записи системного вызова на объекте с общей памятью по сравнению с одним из memcpy

Я использую общую память (с семафором) для связи между двумя процессами:
Во-первых, я открываю объект общей памяти, используя вызов:

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) //???

Надеюсь увидеть ваш ответ! Спасибо!

1

Решение

read является системным вызовом и подразумевает переход привилегий, который подразумевает манипулирование адресным пространством (MMU), и тогда ядро ​​вызовет memcpy из предоставленного вами буфера на адрес назначения. Это в основном то же самое, что вы бы сделали (позвоните memcpy), но добавив 2 дорогие операции (переходы привилегий) и дешевую (поиск адреса назначения).

Мы можем сделать вывод, что read/write очень вероятно, будет медленнее.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]