2014-07-16 2 views
-1

는 이후 C++에서는 Pthreads 또는 Linux가

Data1, Data2, Data3, Data4 and many more 

리눅스

에 우리가 내가 C++로 서로 다른 데이터 구조이 있다고 가정하자 처리, 내가 네트워크 추적 파일 (와이어 샤크 파일)를 사용합니다. 위의 모든 데이터 파일에 각 패킷을 보냅니다. 그들 중 누구라도 패킷에 대한 플래그를 설정하면. 다른 모든 데이터 파일이 해당 패킷에서 처리를 중지하고 해당 네트워크 추적 파일의 다음 패킷으로 이동하기를 원합니다. 내 시나리오 하나를 사용하는 것이 더 좋을 것입니다에서

:

에서는 Pthreads 또는 Linux 프로세스 (포크 ...)

+1

"사용하기"를 정의하십시오. 또는 더 나은 아직, 둘 다 시도하고 귀하의 요구에 따라 프로필. – user657267

+0

메모리 제한이 있습니까? IPC, 공유 메모리 또는 병행 성 경험이 있습니까? 이 모든 것들이 내가 생각하는 해답에 영향을 미친다. – ifyalciner

+1

프로세스는 오버 헤드가 훨씬 더 많으며 제어 및 통신하기가 더 어렵습니다. 훨씬 더 나은 선택은 스레드 일 것입니다. 최선의 선택은 아마''std :: thread'를 사용하는 것입니다. (http://en.cppreference.com/w/cpp/thread/thread) –

답변

2

프로세스는 각각 별도의 힙을 당겨 개별 주소 공간을 가지고, 스택 및 코드 누워 내부. 프로세스를로드하는 과정에서 OS가 메모리 리소스를 생성하고 관리해야합니다. 데이터를 하나씩 전송하려면 OS 지원, Linux의 경우 공유 메모리 또는 파이프와 같은 프로세스 간 통신 기술이 필요합니다. 또한 공유 세마포어로 보호되는 데이터에 액세스 할 때마다 시스템 호출이 필요합니다. 그러면 속도가 크게 떨어집니다. 프로세스는 OS별로 다른 프로세스로부터 보호됩니다. 한 프로세스가 다른 프로세스가 중단 될 가능성보다 제대로 작동하면 어렵습니다. 프로세스는 다른 사람으로부터 코드가 보호되는 샌드 박스를 만듭니다.

스레드의 가벼운 무게입니다. 생성과 삭제는 시간과 비용이 적게 듭니다. 별도의 주소 공간 (페이지 테이블)이 없습니다. 데이터를 서로 쉽게 공유 할 수 있습니다. OS 지원이 필요하지 않습니다. 그러나 스레드는 다른 스레드의 실수에 더 취약합니다. 그리고 여전히 공유 데이터의 경우 세마포어 또는 뮤텍스와 같은 동시성 도구가 필요합니다.

대부분의 브라우저는 탭을 관리하기 위해 스레드를 사용합니다. 하지만 하나가 실패하면 대부분 모든 응용 프로그램이 다운됩니다. 그러나 Chrome은 각 탭과 확장 프로그램을 서로 다른 프로세스로 실행합니다. 충돌이 발생해도 여전히 큰 문제가없는 다른 사람이 있습니다.

확실하지 않은 경우 스레드로 이동하십시오. 그들은 문제없이 질문에 명시된 요구를 만족시킬 것입니다.

+0

앞서 말했듯이 한 프로세스가 패킷 플래그를 설정하면 다른 모든 프로세스는 네트워크 추적 파일의 다음 패킷으로 이동해야합니다. SOme 종류의 IPC가 여기에 관련되어 있습니다. 그래서이 시나리오에서 스레드를 선호해야합니까? – Xara

+0

오케이. 한 가지 더 궁금한 점은, 각 프로세스가 자체 네트워크 추적 파일을 처리하는 대신 Linux에서 프로세스를 만들면됩니다. 난 그냥 네트워크 추적 파일의 복사본을 하나 가지고 있고 각 프로세스는 패킷을 읽습니다. 이 접근 방식은 리눅스 프로세스에서 작동합니까? – Xara

+0

Linux의 모든 파일은 공유되는 것으로 간주됩니다 (모든 것이 파일이라는 개념에서). 프로세스 중 하나 (또는 ​​공유 메모리를 생성하고 새 프로세스를 생성하는 다른 프로세스)보다 네트워크 추적 파일의 복사본을 하나만 가지려면 공유 플래그가있는 파일을 열거 나 공유 메모리를 만들고 파일 내용을로드해야합니다 . 그리고 동시성을 관리해야합니다. 스레드 접근 방식보다 훨씬 복잡합니다. 아직도 당신의 전화. – ifyalciner