进程是资源分配的最小单位(数据隔离),线程是cpu调度的最小单位,每个进程至少有一个线程
能直接被cpu调度的是线程,轻型实体
共享进程资源,可以并发执行,全局变量在多个线程之间共享
用户级线程,内核级线程,混合实现
全局解释器锁 GIL:同一时刻只能有一个线程来访问cpu
同一进程的不同线程在不同的cpu核心运行导致数据安全性问题
锁的是线程,会导致效率降低
不是python语言的问题,是Cpython解释器的特性
在Cpython解释器下的python程序,在同一时刻,多线程中只能有一个线程被cpu执行
对于高CPU的计算类,多线程优势不大
对于高IO的类型,多线程优势很大
爬虫、聊天、处理日志、处理web请求、读写数据库
py是解释型语言,解释型语言还没有能真正解决多核安全性问题的
java是编译型语言
threading.current_thread()
threading.active_conut() # 主线程也计算在内
threading.enumerate() # 枚举子线程
##################################################
多线程实现sever
import socket
from threading import Thread
def serve(conn):
while True:
conn.send(b‘Hello‘)
msg = conn.recv(1024).decode(‘utf-8‘)
print(msg)
conn.close()
sk = socket.socket()
sk.bind((‘127.0.0.1‘,8080))
sk.listen()
while True:
conn,addr = sk.accept()
p = Thread(target= serve,args=(conn,))
p.start()
sk.close()
原文:https://www.cnblogs.com/farion/p/10023442.html