谈谈对线程与进程的理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谈谈对线程与进程的理解相关的知识,希望对你有一定的参考价值。
概念:
线程
线程(threading)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
进程
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
进程与线程区别
a.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
b.通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
c.调度和切换:线程上下文切换比进程上下文切换要快得多。
d.在多线程OS中,进程不是一个可执行的实体。
threading模块
直接调用
1 import threading 2 import time 3 4 def tell(num): #定义每个线程要运行的函数 5 6 print(num) 7 time.sleep(3) 8 9 if __name__ == ‘__main__‘: 10 t1 = threading.Thread(target=tell,args=(1,)) #生成一个线程实例 11 t2 = threading.Thread(target=tell,args=(2,)) #生成另一个线程实例 12 t1.start() #启动线程 13 t2.start() #启动另一个线程 14 print(t1.getName()) #获取线程名 15 print(t2.getName())
继承调用
1 __author__ = ‘thinkpad‘ 2 # !/usr/bin/env python 3 #-*- coding:utf-8 -*- 4 5 import threading 6 import time 7 8 class MyThread(threading.Thread): 9 10 def __init__(self,num): 11 threading.Thread.__init__(self) 12 self.num = num 13 def run(self):#定义每个线程要运行的函数 14 print(self.num) 15 time.sleep(3) 16 17 if __name__ == ‘__main__‘: 18 t1 = MyThread(1) 19 t2 = MyThread(2) 20 t1.start() 21 t2.start() 22 print(t1.getName()) 23 print(t2.getName())
互拆锁
1 __author__ = ‘thinkpad‘ 2 # !/usr/bin/env python 3 #-*- coding:utf-8 -*- 4 import threading 5 import time 6 7 def addNum(): 8 global num #在每个线程中都获取这个全局变量 9 print(‘--get num:‘,num ) 10 time.sleep(1) 11 lock.acquire() #修改数据前加锁 12 num -=1 #对此公共变量进行-1操作 13 lock.release() #修改后释放 14 num = 100 #设定一个共享变量 15 thread_list = [] 16 17 lock = threading.Lock() #生成全局锁 18 for i in range(100): 19 t = threading.Thread(target=addNum) 20 t.start() 21 thread_list.append(t) 22 23 for t in thread_list: #等待所有线程执行完毕 24 t.join() 25 print(‘final num:‘, num )
以上是关于谈谈对线程与进程的理解的主要内容,如果未能解决你的问题,请参考以下文章