Linux 공유 메모리 : shmget () 대 mmap ()?
에서 이 스레드 영업 이익은 사용하는 것이 좋습니다 mmap()
대신 shmget()
리눅스에서 공유 메모리를 얻을 수 있습니다. 나는 방문 이 페이지와 이 어떤 문서를 얻기 위해 페이지를하지만, 두 번째는 대한 모호한 예를 제공합니다 mmap()
.
거의 초보자이고 두 프로세스간에 일부 정보 (텍스트 형식)를 공유해야하는 경우이 shmget()
방법을 사용해야 mmap()
합니까? 그리고 왜?
두 방법 모두 실행 가능합니다. mmap
메소드는 조금 더 제한적 shmget
이지만 사용하기 쉽습니다. shmget
이전 System V 공유 메모리 모델이며 가장 광범위한 지원을 제공합니다. mmap
/ shm_open
는 공유 메모리를 수행하는 새로운 POSIX 방식이며 사용하기가 더 쉽습니다. 귀하의 OS가 POSIX 공유 메모리 사용을 허용한다면 나는 그것을 사용하는 것이 좋습니다.
몇 가지 힌트 :
fork
그때mmap
를 통해 자녀를 만드는MAP_ANONYMOUS | MAP_SHARED
것이 가장 쉬운 방법입니다.MAP_ANONYMOUS
그러나 POSIX에 의해 지정되지 않은 Linux 확장 입니다.- 프로세스를 독립적으로 시작하지만 공유 메모리 이름을 제공 할 수있는 경우
shm_open
(+ftruncate
) +mmap
withMAP_SHARED
는 2/3 호출입니다.librt
일부 OS에서 필요합니다 . - 당신의 OS가있는 경우
/dev/shm/
다음shm_open
의 파일을 여는 것과 같습니다/dev/shm/
.
이것의 많은 부분은 역사와 미래 방향과 관련이 있습니다.
한때 유닉스의 두 가지 주요 (그리고 다소 경쟁적인) 버전이있었습니다. 시스템 V와 BSD입니다. SysV에는 빅 3-공유 메모리, 세마포어 및 메시지 큐를 포함한 자체 버전의 IPC가 있습니다. POSIX는 일을 통합하려고 노력했습니다.
따라서 현재 posix 공유 메모리, MQ 및 세마포어와 sysV 버전의 두 가지 버전이 있습니다. 좀 더 혼란스럽게 만들기 위해 sysV 버전 도 posix의 일부입니다.
그래서 기본적으로 질문은 Posix 또는 sysV 스타일 공유 메모리를 사용 하시겠습니까? 일반적으로 대부분의 사람들은 장기적인 관점을 취하고 Posix를 선택합니다. 이것이 미래로가는 길이 기 때문입니다. 그러나 현실적으로 sysV는 너무 많은 시스템에 너무 많이 내장되어있어 사라질 것이라는 심각한 의심을 가져야합니다.
따라서 장기적인 요소를 제거하면 프로젝트와 취향에 맞는 것이 무엇인지 결정됩니다. 일반적으로 sysV 버전은 실제로 다소 더 강력한 경향이 있지만 대부분의 사람들이 처음 접촉 할 때 약간 혼란스러워하는 투박한 인터페이스를 가지고 있습니다. 특히 sysV 세마포어 및 메시지 큐에 해당됩니다. 공유 메모리 측면에서 sysV와 posix가 모두 어색하다고 주장 할 수 있습니다. sysV 버전은 투박 ftok
하고 핵심적인 요소를 전달하는 반면 posix는 여러 번의 호출과 설정을위한 경쟁 조건으로 끝납니다. 외부에서 보면 posix 버전은 파일 시스템을 활용하고 ipcs
sysV에서 요구하는 별도의 유틸리티 프로그램 (예 :) 에 의존하지 않고 'rm'과 같은 표준 명령 줄 기능으로 유지 관리 할 수 있다는 장점이 있습니다.
그렇다면 어떤 것을 사용해야합니까? 일반적으로 posix 버전입니다. 하지만 sysV 버전에 대해 잘 알고 있어야합니다. 특정 상황에서 활용할 수있는 posix 버전의 기능을 뛰어 넘는 몇 가지 기능이 있습니다.
참조 URL : https://stackoverflow.com/questions/21311080/linux-shared-memory-shmget-vs-mmap
'Programing' 카테고리의 다른 글
취소 가능한 비동기 / 대기에서 TransactionScope를 처리하는 방법은 무엇입니까? (0) | 2021.01.07 |
---|---|
속성으로 ArrayList에서 개체를 찾는 방법 (0) | 2021.01.07 |
MongoDB 오픈 소스 vs MongoDB Enterprise (0) | 2021.01.07 |
NodeJS를 사용하여 Amazon S3에 파일 업로드 (0) | 2021.01.07 |
mockito에서 doThrow () doAnswer () doNothing () 및 doReturn () 사용법 (0) | 2021.01.07 |