(对于线程篇的一些基本了解)
什么是线程?
-
在一个进程的内部要同时干多件事,就需要同时运行多个子任务,我们把进程内的这些子任务叫做线程;
-
线程通常叫做轻型的进程,线程事共享内存空间的并发执行的多任务,每一个线程都共享一个进程的资源;
-
线程是最小的执行单元,而进程有至少一个线程组成;
-
如何调度进程和线程,完全由操作系统决定,程序自己是不能决定什么时候执行和执行多长时间。(这些有操作系统决定的)
-
关于模块:
- _thread模块 低级模块(接近底层C语言写的)
- threading模块 高级模块,对_thread进行了封装
# 启动一个线程
import threading, time
def run(a):
print('子线程--{}--开始'.format(threading.current_thread().name))
# 实现线程的功能
time.sleep(2)
print('打印', a)
print('子进程--{}--结束'.format(threading.current_thread().name))
if __name__ == '__main__':
# 任何进程默认就会启动一个线程,成为主线程,主线程可以启动新的子线程
print('主线程({})启动'.format(threading.current_thread()))
# 创建子线程
t = threading.Thread(target=run, args=(1,), name='runThread')
t.start()
# 等待线程结束
t.join()
print('主线程({})结束'.format(threading.currnet_thread()))
# 线程间共享数据
'''
多线程和多进程最大的不同在于:多进程中,同一个变量,各自有一份拷贝在每个进程中,互不影响。
而多线程中,所有变量都由所有线程共享。所以任何一个变量都可以被任意一个线程修改。
因此线程之间共享数据最大的危险,多个线程同时修改一个变量,容易把内容改乱
'''
import threading
num = 100
def run(n):
global num
for i in range(100000):
num += n
num -= n
if __name__ == '__main__':
t1 = threading.Thread(target=run, args=(6,))
t2 = threading.Thread(target=run, args=(9,))
t1.start()
t2.start()
t1.joi