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) +mmapwithMAP_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 버전은 파일 시스템을 활용하고 ipcssysV에서 요구하는 별도의 유틸리티 프로그램 (예 :) 에 의존하지 않고 '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 |