并发编程之线程

今日内容概要

  • 互斥锁
  • 线程
  • 多线程实现TCP服务端并发
  • join方法
  • 同一进程下线程之间数据共享
  • 线程对象相关方法
  • 守护线程
  • GIL全局解释器

互斥锁

多个程序同时操作一份数据的时候很容易产生数据错乱!
为了避免数据错乱,我们要使用互斥锁。
1.互斥锁
将并发变成串行,虽然牺牲了程序的执行效率,但是保证了数据安全。

如何使用:
# 互斥锁也是multiprocessing 模块中的类,我们可以在创建进程导模块时一起导入。
from multiprocessing import Process,Lock
mutex = Lock()
# 抢锁
mutex.acquire()
# 释放锁
mutex.release()

注意:
互斥锁只应该出现在多个程序操作数据的地方,其他位置尽量不要加。

线程

1.线程是资源单位
进程相当于是车间,进程负责给头部的线程提供相应的资源。
2.线程是执行单位
线程相当于是车间里面的流水线,线程负责执行真正的功能。
3.一个进程至少含有一个

4.多进程与多线程的区别

  • 多进程:
    需要申请内存空间,需要拷贝全部代码,资源消耗大
  • 多线程:
    不需要申请内存空间,也不需要拷贝全部代码,资源消耗小
  • 同一个进程下多个线程之间资源共享

5.创建线程的两种方式
开设线程不要完整的拷贝代码,所以无论什么系统都不会出现反复操作的情况,也不需要在启动脚本执行,但是为了兼容性和统一性,习惯在启动脚本编写。
线程的创建与进程创建代码步骤相似:

  • 方式一:
from threading import Thread
import time

# 方法一:
def task(name):
	print(f'{name}正在运行')
	time.sleep(3)
	print(f'{name}运行结束')

if __name__=='__main__':
	# 创建线程对象
	t = Thread(target=task,args=('kk',))
	t.start()
	print('主线程')
  • 方式二:
import time
from threading import Thread

class My_Thread(Thread):
	def __init__(self,name):
		super().__init__()
		self.name=name


	def run(elf):
		print(f'{self.name}正在运行')
		time.sleep(3)
		print(f'{self.name}运行结束')

obj = My_Thread('jadon')
obj.start()
print('主线程')

多线程实现TCP服务端并发

比进程更加简单方便,消耗的资源更少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值