2017-10-24 6 views
0

나는 만들고 응용했다. 이 응용 프로그램에서는 다중 처리 라이브러리를 사용합니다. 이 애플리케이션에서는 카프카 (Kafka)에서 데이터를 소비하고 Python 대기열에 두 개의 프로세스 (동일한 클래스의 인스턴스)를 돌린다. 내가 (그래서 별도의 스레드가 별도의 CPU 스레드에 매핑되는) 여러/별도의 CPU를 사용할 필요가 멀티 스레딩에 대해 얘기하기 위해 이해 Python multiprocessing파이썬 다중 처리 및 concurency 대 paralellism

Q1. Is it concurrency or is it parallelism? 
Q2. Is it multithreading or is it multiprocessing? 
Q3. How does Python maps Processes to CPUs? (does this question make sense?) 

:

이 내가 사용하는 라이브러리입니다.

다중 처리에 대해 말하기 위해 두 프로세스에 별도의 메모리 공간을 사용해야합니까? 맞습니까?

하나의 응용 프로그램 인스턴스에서 두 개의 프로세스를 돌리면 동시성에 대해 이야기합니다.

위의 응용 프로그램을 여러 번 돌리면 병렬 처리에 대해 이야기 할 수 있습니까? (여러 CPU, 별도의 메모리 공간 사용)?

나는 다음과 같이 파이썬 라이브러리를 정의하는 참조 : Python multiprocessing library

The multiprocessing package offers both local and remote concurrency 

...

Due to this, the multiprocessing module allows the programmer to fully leverage multiple processors on a given machine. 

...

A prime example of this is the Pool object which offers a convenient means of parallelizing the execution of a function across multiple input values, distributing the input data across processes (data parallelism). 

답변

0

Q1 : 그것은 이상이다 동시성, 병렬 처리도 가능하다. the answer to this question에 정의 됨). 분명히 한 대의 프로세서 만 있으면 진정한 병렬 처리가 불가능합니다. 한 번에 하나의 프로세스 만 CPU를 사용할 수 있기 때문입니다. 그러나이 경우에도 muliprocessing 라이브러리를 사용하면 별도의 프로세스에서 실행되는 여러 작업을 정의 할 수 있습니다. 어떤 프로세스가 실행될 지 결정하는 것은 OS의 스케줄러가 될 것입니다.

질문 2 : 다중 처리 (...는 라이브러리 이름에 의해 암시되는 종류 임). 대부분의 Python 해석기 구현에 Global Interpreter Lock이 있기 때문에 스레드와의 병렬 처리는 불가능합니다. 멀티 프로세싱은 프로세스 내부에서 프로세스를 사용하는 스레딩 방식의 인터페이스를 제공합니다.

질문 3 : 그렇지 않습니다. 파이썬은 프로세스를 생성하고 OS 스케줄러는 누가 언제 어디에서 실행하는지 결정했습니다. 특정 CPU에서 프로세스를 실행하는 방법은이지만, 이는 기본 동작이 multiprocessing이 아니며, 프로세스를 CPU에 고정하도록 라이브러리를 강제 설정하는 방법을 알지 못합니다.

0

먼저 별도의 스레드가 별도의 CPU에 매핑되지 않습니다. 그것은 선택 사항이며, GIL 때문에 파이썬에서는 프로세스의 모든 스레드가 동일한 CPU에서 실행됩니다.

1) 다중 처리 패키지는 다음과 같은 작업을 수행 할 수 있으므로 실행 순서가 설정되지 않은 동시성과 병렬 처리가 모두 가능합니다. GIL 제한을 우회하여 여러 프로세서에서 실행됩니다.스레딩 패키지는 또 다른 이야기이기 때문에, 그것은 확실히

3) I 라인에서 말할 수 있지만, 파이썬은, IMO CPU-s의 프로세스를 매핑하지 않습니다 멀티 프로세싱 것

2), 그것은이 세부 잎 OS

+0

파이썬이 멀티 스레딩을하는지 확실하지 않다는 뜻입니다. Java => JVM에서 응용 프로그램 스레드 (또는 JVM 스레드)를 OS 스레드에 매핑합니까? – BlueTomato

+0

JVM에서 Java는 OS 스케쥴러에 스레드를 남긴다. 아는 한 JVM은 GIL 제한을 겪지 않는다. –

+0

어떤 구현을 사용하고 있는지 알면 파이썬에 대해서 확신 할 수있다. 가장 일반적인 cPython은 GIL 문제가있어 효과적인 멀티 스레딩을 할 수 없습니다. – GPhilo