谈谈对线程与进程的理解

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())
View Code

继承调用

技术分享
 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())
View Code

 互拆锁

技术分享
 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 )
View Code

 

 

 

 

以上是关于谈谈对线程与进程的理解的主要内容,如果未能解决你的问题,请参考以下文章

网络概念小结

线程与进程的区别以及对多线程并发的理解

线程与进程的区别以及对多线程并发的理解

进程与线程概念理解

Java线程与锁

[转]论多进程与多线程