多进程和多线程
多进程:进程就是正在运行中的程序或者正在执行中的任务,当程序还没开始或者已经结束那么就不能再成为进程。多进程就是多个正在运行的程序或任务。
举个栗子:大噶可以打开电脑上的任务管理器,便可查看操作系统下有哪些进程,如图状态栏里显示正在运行的每一个程序就是进程。
多线程:线程就是进程或任务的执行者,多线程就是进程中有多个执行者。
举个栗子:银行里有50个客户等待取钱,那么此时银行就要去处理这个任务(进程启动),
但只有1个窗口提供服务,那么效率就会显得偏慢(单线程),此时增加5个窗口来提供取钱服务(多线程),那么效率会大大提升,此时这些每一个窗口就是一个线程,他们共同去完成给50个客户取钱的任务
多线程和多进程最大的区别:
① 进程之间数据不共享,在程序中优先执行父进程(主进程),举个栗:电脑启动时优先执行的win10或者其他操作系统,然后才能去执行微信qq等程序,此时,操作系统就是父进程,微信QQ就是操作系统的子进程。
② 一个进程中的多线程共享这个进程的数据,在程序中主线程和子线程同时启动,同时抢占进程的资源,谁先抢到是不确定的。
关于长连接的描述脖主在上篇描述,如果有不清楚的可以去查看下,放上链接:
TCP多线程长连接
采用多线程长连接可以实现一个服务器同时可以响应多个客户端请求,这是相比单线程长连接的最大的优点
代码环节:实现一个多线程服务器端:
from socket import *
from threading import Thread
def main():
# 创建socket对象
server_sock = socket(AF_INET,SOCK_STREAM)
#定义服务器的地址
address = (gethostname(),6688)
server_sock.bind(address)
#监听请求
server_sock.listen()
#建立长连接
try:
while True:
print('---多进程--等待客户端连接本服务器6688!--')
client_sock,addr = server_sock.accept()
print('客户端(%s)已成功连接。。'%str(addr))
# 由于线程创建是在循环里创建和启动的
# 因此每循环一次就会产生一个线程
thread = Thread(target = work,args = (client_sock,addr,))
thread.start()
finally:
server_sock.close()
def work(sock,addr):
while True:
data = sock.recv(1024)
if len(data)>0:
print('接收到数据内容:',data)
else:
print('客户端%s已关闭'%str(addr))
break
if __name__ == '__main__':
main()
在使用的时候先开启服务器端,然后可以打开多个网络连接助手,连接成功后便可以发送在服务器端接收客户端的消息