什么是线程(thread)

线程是操作系统能够进行运算调度的最小单位,被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务

一个线程就是一堆指令集合

#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:thread.py
# time:2021/03/26

import time

def foo():
    print('foo')
    time.sleep(1)     #sleep不占cpu的,cpu是不工作的

def bar():
    print('bar')
    time.sleep(2)

foo()
bar()

/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/thread_precoss/thread.py
foo
bar

Process finished with exit code 0

#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:thread.py
# time:2021/03/26

import time

begin = time.time()
def foo():
    print('foo')
    time.sleep(1)

def bar():
    print('bar')
    time.sleep(2)

foo()
bar()
end=time.time()
print(end-begin)

/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/thread_precoss/thread.py
foo
bar
3.0025744438171387

Process finished with exit code 0

#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:thread.py
# time:2021/03/26

import time
import threading

begin = time.time()
def foo(n):
    print('foo%s' %n)
    time.sleep(1)

def bar(n):
    print('bar%s' %n)
    time.sleep(2)

t1 = threading.Thread(target=foo,args=(1,))    #创建一个线程对象,target后面写执行的函数或任务,args后面跟参数,以元组方式
t2 = threading.Thread(target=bar,args=(2,))    #子线程和主线程同时工作,没有先后。
t1.start()    #启动线程
t2.start()

print('.....in the main.....')

end=time.time()
print(end-begin)

/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/thread_precoss/thread.py
foo1
bar2
.....in the main.....
0.0002884864807128906

Process finished with exit code 0

#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:thread.py
# time:2021/03/26

import time
import threading

begin = time.time()
def foo(n):
    print('foo%s' %n)
    time.sleep(1)
    print('end foo')

def bar(n):
    print('bar%s' %n)
    time.sleep(2)
    print('end bar')

t1 = threading.Thread(target=foo,args=(1,))
t2 = threading.Thread(target=bar,args=(2,))
t1.start()
t2.start()

print('.....in the main.....')

end=time.time()
print(end-begin)

/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/thread_precoss/thread.py
foo1
bar2
.....in the main.....
0.00030875205993652344
end foo
end bar

Process finished with exit code 0

#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:thread.py
# time:2021/03/26

import time
import threading

begin = time.time()
def foo(n):
    print('foo%s' %n)
    time.sleep(1)
    print('end foo')

def bar(n):
    print('bar%s' %n)
    time.sleep(2)
    print('end bar')

t1 = threading.Thread(target=foo,args=(1,))
t2 = threading.Thread(target=bar,args=(2,))
t1.start()
t2.start()

print('.....in the main.....')

t1.join()    #如果t1线程不结束,它不往下走了,
t2.join()
end=time.time()
print(end-begin)

/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/thread_precoss/thread.py
foo1
bar2.....in the main.....

end foo
end bar
2.0026347637176514

Process finished with exit code 0

#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:thread.py
# time:2021/03/26

import time
import threading

begin = time.time()
def foo(n):
    print('foo%s' %n)
    time.sleep(8)
    print('end foo')

def bar(n):
    print('bar%s' %n)
    time.sleep(8)
    print('end bar')

t1 = threading.Thread(target=foo,args=(1,))
t2 = threading.Thread(target=bar,args=(2,))
t1.start()
t2.start()

print('.....in the main.....')

t1.join()
t2.join()
end=time.time()
print(end-begin)

/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/thread_precoss/thread.py
foo1
bar2
.....in the main.....
end foo
end bar
8.008392572402954

Process finished with exit code 0