스레드의 제 15 장, 동시 프로그래밍

스레드의 제 15 장, 동시 프로그래밍

1. 스레드는 무엇입니까

올바른 개념 : 프로세스가 실제로 실행의 단위 아니다는, 프로세스, 자원 단위 각 프로세스의 스레드와 함께 제공, 스레드 실행 장치는 CPU에

추상 이해 :

프로세스는 시스템에서 실행되는 애플리케이션을 말한다 스레드가 실행 프로세스 내의 자원의 시스템 프로세서의 시간 배분, 또는 별도의 유닛의 기본 단위이다. 쓰레드 스케줄링 단위 인 운영 체제에.

线程:cpu最小的执行单位
进程:资源集合/资源单位.
线程运行 = 运行代码
进程运行 = 各种资源 + 线程

사진은 이해 :

175 è¿ ?? C ?? ???? çº¿ç¨ ㄷ 하자고???? ºa ???? "- 01.png

예를 들면 이해 :

在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程
在工厂中,  每个车间都有房子,而且每个车间默认就有一条流水线.

2. 프로세스와 스레드의 차이점

  1. 스레드의 메모리 공간을 공유하는 데이터의 단일 스레드 (프로세스 데이터)

  2. 프로세스 : 물리적 메모리 공간 분리 (서로 격리 이상의 프로세스 메모리 공간)

  3. 이 프로세스 메모리 공간을 열 수있는 운영 체제를 알려줍니다

    인 스레드가 작업 코드를 수행하기 위해 운영 체제를 알려줍니다 (스레드를 생성하는 프로세스의 100 배 속도)

두 가지 방법 3. 스레드

기능 공개

from threading import Thread
import time
def task(name):
    print('%s is runing '%name)
    time.sleep(2)
    print('%s is done'%name)
 
t=Thread(target=task,args=('子线程',))
t.start()

오픈 클래스

class Task(Thread): 
    def run(self): 
    print('%s is runing ' % self.name) 
    time.sleep(2)   
    print('%s is done' % self.name)
t = Task()t.start()print('zhu')

4. 자식 프로세스 속도의 하위 스레드를 만듭니다

from threading import Thread
from multiprocessing import Process
import time

def task(name):
    print(f'{name} is running')
    time.sleep(2)
    print(f'{name} is end')


if __name__ == '__main__':
    t = Thread(target=task,args=('子线程',))
    p = Process(target=task,args=('子进程',))
    # t.start()
    p.start()
    print('主')
------------------------------------------------
############开启子线程的打印效果:################

子线程 is running
主
子线程 is end

##########开启子进程打印效果:##################

主
子进程 is running
子进程 is end

요약 : 빠른 프로세스 생성에 비해 스레드

아이의 5. 증거 데이터를 공유 스레드

from threading  import Thread
import time,os

x = 100
def task():
    global x
    x = 50
    print(os.getpid()) # 4652
    
if __name__ == '__main__':

    t = Thread(target=task)
    t.start()
    time.sleep(2)
    print(x) # 50
    print(os.getpid()) # 4652
------------------------------------------
4652
50
4652

열기 프로세스가 새로운 자식 프로세스의 메모리 공간을 개방하고, 스레드 오프너 스레드가 공유 메모리 공간

즉 : 아이를 열 수있는 프로세스의 PID 번호가 동일하지 않습니다,

열기 스레드가 동일한 스레드를 성가 PID

6. 쓰레드는 가입 방법

단일 자식 스레드

子线程 start
主线程
子线程 endfrom threading import Thread
import time
def task():
    print('子线程 start')
    time.sleep(2)
    print('子线程 end')
def task2():
    print('子线程 start')
    time.sleep(5)
    print('子线程 end')

t = Thread(target=task)
t.start()
t2.start()
t.join() # 等待子线程运行结束
print('主线程')
-------------------------------
子线程 start
子线程 end
主线程
----------------------------------
#给t.join()加注释的结果如下
子线程 start
主线程
子线程 end

설명 : 메인 스레드가 시작 수면 자식 스레드와 같은 시간을 기다리는는 자식 스레드 () 전에 자식 스레드 만 실행, 이상을 실행해야한다는, 가입 print('主线程')t.join을 부여하는 경우에만 메인 쓰레드가 완료되면, () 주석을 추가, 다음 주 스레드가 완료되면, 메인 쓰레드는 바로 종료됩니다.

여러 자식 스레드

from threading import Thread
import time
def task(name,n):
    print(f'{name} start')
    time.sleep(n)
    print(f'{name} end')

t1 = Thread(target=task,args=('线程1',1))
t2 = Thread(target=task,args=('线程2',2))
t3 = Thread(target=task,args=('线程3',3))
start = time.time()
t1.start()
t2.start()
t3.start()
t1.join() # 111s
t2.join() #
t3.join()
end = time.time()
------------------------------------------
线程1 start
线程2 start
线程3 start
线程1 end
线程2 end
线程3 end
3.0022878646850586
#主线程开始->线程1开始->线程1结束->线程2开始->线程2结束->线程3开始->线程3结束->主线程结束
#因为1线程、2线程、3线程进入了同一个方法,本应该"同时"start()运行,但是现在是线程1 在start后使用join,那么线程2会老老实实的等线程1先跑完

설명 : 다중 스레드의 동시 실행을 구현

생각

하나의 CPU 코어의 경우 여러 스레드의 방법을 사용 생각해?

A : 단일 코어 CPU에서 실행되는 멀티 스레드 프로그램, 동시에 하나의 스레드 만 실행, 시스템은 당신이 그것을 스레드 수 있도록 스위치, 각 타임 슬라이스를 실행하는 각 스레드에 시간 조각의 시스템 할당은 아마 약 10ms의, 모습입니다 동시에 실행 좋아하지만, 각 스레드가 실제로 다른 스레드에 약간의 변화를 실행하는 스레드가 실제로 지출을 증가 전환의 효율성을 개선하지 않습니다 계속 실행

7. 프로세스가 가입 이해

from multiprocessing import Process
from threading import Thread
import time
def task():
    print('进程 开启')
    time.sleep(10)
    print('进程 结束')
def task2():
    print('子线程 开启')
    time.sleep(2)
    print('子线程 结束')

if __name__ == '__main__':
    p = Process(target=task)
    t = Thread(target=task2)
    t.start() # 开线程
    p.start() # 开进程
    print('子进程join开始')
    p.join() # 主进程的主线程等待子进程运行结束
    print('主') 

8. 기타 관련 사용 스레드

   # print(t1.is_alive()) # True
   # print(t1.getName()) # Thread-1
   # print(t2.getName()) # Thread-2
   # t1.setName('班长')
   # print(t1.getName())
   # print(currentThread().name)
   # print(enumerate()) # [<_MainThread(MainThread, started 1856)>, <Thread(Thread-1, started 6948)>, <Thread(Thread-2, started 3128)>]
   # print(activeCount()) # 3
   # print(len(enumerate())) # 3

추천

출처www.cnblogs.com/demiao/p/11536044.html