프로세스 (과정) 란 무엇입니까?
프로그램 실행 인스턴스는 프로세스라고합니다. (이 프로세스는 자원들의 집합이다)
각 프로세스는 프로세스가 가상 메모리 주소 공간, 실행 코드, 공동 보안 컨텍스트의 운영 시스템을 호출 (권한)이이 절차를 수행하는 데 필요한 자원을 제공
유일한 프로세스 식별자 PID, 우선 순위 클래스, 최소 및 최대 작업 메모리 공간을 구현하는 프로세스는 하나 개 이상의 스레드 (시간에있어서, 적어도 하나 개의 스레드) 프로세스는 일반적으로 첫 번째 스레드를 필요 (스레드는 하위 하위 스레드, 모두 전달 아무 제휴를 만들 수 있습니다, 아이 thread)는 메인 쓰레드라고하지만, 메인 스레드는 추가 스레드를 만들 수 있습니다.
프로세스와 스레드의 차이점은 무엇입니까?
스레드는 프로세스보다 더 빨리 시작하지만, 두 가지의 실행 속도는 비교할 수 없습니다.
1. 쓰레드 공유 메모리 공간 사이의 메모리 공간은, 처리는 독립적이다.
2. 두 개의 스레드를 직접 공유 메모리 공간의 과정에서 데이터에 액세스 할 수 있습니다. 여러 하위 프로세스간에 데이터를 공유하지 않는 동일한 데이터에 대한, 그들은 서로 완전히 독립적으로 부모 프로세스를 복사합니다.
이 스레드 3 (공유 데이터, 정보의 송신 등 관련) 방법, 복수간에 직접 상호 작용할 수있다. 두 프로세스는 통신을 중간 프록시를 통해 달성되어야 원한다.
4. 새로운 스레드가 생성하는 것은 매우 쉽습니다, 새로운 프로세스를 생성하는 것은 부모 프로세스의 복제 할 필요가있다.
5. 스레드 제어하고 동일한 프로세스에서 다른 스레드의 작업을하지만, 프로세스는 그 아이를 작동 할 수 있습니다.
메인 스레드의 변화 6. 부모 프로세스에 대한 다른 스레드의 동작 (그들은 데이터를 공유하기 때문에)에 영향을 줄 수있는 수정을 다른 하위 프로세스 데이터에 영향을주지 않습니다 (그러나 부모 프로세스가 삭제 , 아이가 영향을 받게됩니다)
또한, 메인 스레드와 자식 스레드는 평행 계산 시간없이 연속 시간 (순서)의 관계를 시작한다.
더 잘 이해하기 위해 :
1. 이해 동시성
. (1) 오기 스레딩 2 오기 시간 3. 4. DEF RUN (N-) . 5 인쇄 ( " 작업 " , N-) . 6 time.sleep (2 ) . 7 . 8 # 두 프로그램의 스레드의 동시 실행이 2 초 총 대기 9. T1 = 스레딩. 스레드 (목표 = RUN, 인수의 = ( " T1 " )) 10 threading.Thread =의 T2 (목표 = RUN, 인수의 = ( " T2 " )) . 11 t1.start () (12)는 t2.start () (13)는 14 # 대비 15 #을4초 모두 직렬 실행 16 # RUN ( "T1") . 17 # RUN ( "T2")
2. #은 동시성의 클래스를 호출의 양식을 계승
1 # 상속 호출 동시성의 클래스로 2 오기 스레딩 3. 오기 시간 4. 5 개. 클래스 합니다 (threading.Thread에) MyThread : . 6 DEF __init__ (자기, N-, SLEEP_TIME) . 7 . 슈퍼합니다 (MyThread,자가) __init__ () . (8) = self.n N- . 9 self.sleep_time는 = SLEEP_TIME 10 (11). DEF RUN (자동) : (12)는 인쇄 ( " 작업 실행 " , self.n가) (13)는 time.sleep (self.sleep_time) (14) 인쇄 ( ' 작업 완료 ' , self.n) 15 16 T1 = MyThread ( ' T1 ' , 2 ) . 17 T2 = MyThread ( ' T2 ' . 4) #의 T1 및 대기 시간 (t2)이 일치하고, 메인 쓰레드 계산 시간 모두 필요한 가입 18이다 . 19 t1.start ()를 20 인 t2.start () (21)가 22 t1.join () 23 인 t2.join () 24 25 인쇄 ( ' 주 스레드가 ... ' )
동시 멀티 사이클 3.for
주요 스레드와 자식 스레드가 동시에 활성화, 모두 순서가 완료되지 않습니다.
어떤이 가입하면 자식 스레드가 아래로 실행 전에 완료 될 때까지, 메인 스레드는 대기하지 않습니다
. 1 가져 오기 스레딩 2 가져 오기 시간 3. 4. DEF RUN (N-) . 5 인쇄 ( " 작업 " , N-) . 6 time.sleep (2 ) . (7) 인쇄 ( ' 작업 완료 ' , N-) . 8 인쇄 ( " ------ .. 스레드 완료 " , threading.current_thread ()) #의 스레드가 현재 실행 형 . 9 (10) . (11) START_TIME = 로 time.time ()을 (12)는 # 동시 다중 루프 13 t_objs = []#의 금고 실 인스턴스 (14) 에 대한 I 의 범위 (50 ) : 15 16 threading.Thread (목표 = RUN, 인수의 = (의 T의 = " T- %의 S " %의 I)) . (17) (18)는 t.setDaemon (참) # 현재 스레드는 스레드를 데몬 19 20 t.start () (21) (22) t_objs.append (t) #을 내부 목록을 넣어, 여기에 가입, 스레드 시작 뒤에 차단하지 아니하기 위해 23 # 24 # t_objs에서 t에 대한 #주기 인스턴스 목록을 스레드, 모든 스레드 대기 완료 25 # t.join () (26) (27) 인쇄 ( ".. 모든 스레드 ------있다 완료 " , threading.current_thread (), threading.active_count ()) #은 현재 나사의 종류와 활성 수보기 (28) 인쇄 ( ' 비용 : ' ,로 time.time ()를 - START_TIME)은 29 30 # 비교 (31)는 #의 RUN ( "T1") 32 # RUN ( "T2")
데몬 스레드 :
모든 하위 쓰레드 프로그래밍 데몬 스레드 : 메인 스레드가 한 주 스레드가 종료 될 때, 당신이 종료 할 수 있습니다, 완료 후 모든 일상 종료를 기다리지 않습니다.
마지막 비 데몬 스레드가 종료 한 후, 프로그램이 데몬 스레드를 귀찮게하지 않을 때까지 메인 쓰레드가 종료의 끝을 기다리지 않습니다 메인 프로그램, 그것은 기다립니다.
데몬 스레드 시나리오 : 소켓 서버 설정
멀티 코어 : 여러 스레드가 동시에 실행 할 수 있습니다.
그러나 파이썬에서, 같은 시간에 당신은 단지 하나 개의 스레드를 실행할 수 있습니다. 파이썬 인터프리터는 직접 호출 스레드 C 언어, 전송의 맥락에 인터페이스. 첫 번째 스레드 실행하도록 제어 할 수없는 프로세스 스레드 실행, 파이썬
. 이 때문에, 통역자는 동시에 작업의 하나의 스레드 만이 유출을 제어뿐만 아니라, 하나의 스레드 만이 데이터를 얻을 수있다. (추가 글로벌 통역 잠금 ) (CPython과)