오늘날의 하드웨어 및 Linux 플랫폼에서는 스레드 모델이 프로세스 모델에 비해 효율성이 떨어지기 때문에 Linux 스레드가 실제로 커널에서 프로세스로 구현된다는 어딘가를 읽었습니다. 그렇다면 왜 우리는 왜 우리 프로젝트에서 (하위 호환성을 제외하고) 여전히 pthread 프로그래밍을 사용합니까? Linux에서 pthreads 모델을 더 이상 사용하지 않는 데 왜 그렇게 주저합니까?
답변1
귀하의 질문으로 판단하면 아직 문제를 보지 못했을 것입니다.스레드표준 프로세스에 비해 이점을 제공합니다.
시스템이 시스템의 컨텍스트 전환 수에 매우 민감하고 사용자 모드에서 커널 모드로 전환하는 고주파 거래와 같은 문제가 있습니다. 이 경우 단일 메모리 공간 내에서 작업하고 가벼운 컨텍스트 전환이 있거나 전혀 컨텍스트 전환이 없는 기능은 걱정할 만큼 성능을 향상시킵니다. 또한 들어오는 데이터 스트림을 처리하는 여러 프로세스가 있는 경우 데이터를 사용 가능한 프로세스에 복사하는 스케줄러를 구현하고 싶지 않습니다. 왜냐하면 공유 메모리에 대기열을 생성하거나 네트워크 기반 IPC를 사용하여 사용 가능한 프로세스에 대한 데이터입니다. 다양한 프로세스를 위한 메모리 공간이 있는 반면, 스레드를 사용하면 데이터를 한 번 읽고 구문 분석한 후 내부적으로 보관할 수 있으므로 모든 스레드가 필요에 따라 해당 특정 이벤트에 액세스할 수 있으므로 실행이 더 빨라집니다.
또한 일부 작업은 동일한 데이터에 대해 서로 다른 시간 또는 동시에 작동할 수 있으며, 이 경우 서로 다른 업데이트 프로세스(스레드)의 업데이트를 짓밟지 않도록 하는 것이 더 쉬워집니다.
이러한 문제와 더 많은 문제(단일 프로세스 공간이 유리해지는 경우)를 고려하면 스레드의 필요성을 알 수 있습니다. 이제 Pthread에 관한 한. 반드시 사용할 필요는 없지만 표준화를 제공하여 플랫폼 간 소스 코드 이식성을 제공합니다.
편집하다
원래 질문에 언급 된 것 같습니다.리눅스 스레드스레드는 사용자 수준과 커널 수준에서 전적으로 스레드를 구현하며, 이는 커널에서 예약할 수 있는 유일한 엔터티이기 때문에 프로세스로 처리되어야 합니다. 2.6 커널부터는 더 이상 그렇지 않습니다.. NPTL스레드를 커널 수준에서 예약 가능한 엔터티로 구현합니다.
비슷한 질문도 볼 수 있습니다스택 오버플로