多线程和多进程的区别
Posted E条咸鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程和多进程的区别相关的知识,希望对你有一定的参考价值。
类似前言一样的东西
多线程和多进程各有优缺点,没有哪个是最好,只有在不同情况下,哪种是更好的
参考文章
https://blog.csdn.net/lishenglong666/article/details/8557215 ---优秀的分割线---
首先先从大概念来解释多线程和多进程的区别,多线程就是CPU资源的分配,多进程就是电脑内存的分配
举个例子,进程相当于公路,线程相当于是分岔路 电脑需要一条公路来运输数据,但是不同的数据有不同的目的地
但是开新的公路代价太高,所以可以在一条公路上分成两条、三条道
不需要的时候小道就销毁掉,需要就再开
多线程相比于多进程来说,线程创建、销毁的代价低,其次进程多了,内存占用的也多,但是CPU利用率低
但是也不是说多进程就一无是处,多进程的可靠性比多线程高,因为进程和进程之间不会互相影响,而多线程有可能会因为一个线程的爆炸而导致进程崩溃
在网上看到的一篇关于这个的表,觉得不错,故而转载
举个用多线程的例子根据上面的优缺点来判断,需要频繁创建、销毁的优先用线程拿之前培训的一个脚本来说
#coding=utf-8
import socket
import threading
import time
#创建socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#监听端口
s.bind(("127.0.0.1",8888))
print("Success")
#指定等待最大连接数量
s.listen(5)
def tcp(sock,addr):
print ("connection from %s:%s " % addr)
sock.send(b"welcome, what's your name") #发送数据给客户端
while True:
data = sock.recv(100)
time.sleep(1)
if data=="exit":
sock.send(b"quit")
break
sock.send(b"hello "+data)
sock.close()
while True:
sock,addr = s.accept() #接受所有来自客户端的内容
t = threading.Thread(target=tcp,args=(sock,addr)) #创建线程
t.start() #开启线程
26-29是多线程的部分,这里的作用呢,就是来一个用户,就开启一个线程,去处理这个用户的请求,当用户断开连接时,就销毁线程
还有一个场景,就是需要进行大量计算,或者处理大量数据的,也可以用到多线程比如说用扫描网站的工具扫描网站后台,只有一个线程去处理这一个网站时,他需要单独的去完成3000+个的枚举,但是假如有60个线程的话,那么每个线程就只需要500+个的枚举,加快速度的同时将空闲的CPU资源利用起来了
那么具体什么时候用到多进程呢,因为本人基本上用的都是单进程多线程的,所以解释的会不到位,有意见的大佬可以指出来,马上改
进程和线程的差别,我觉得就是工作量上的问题,任务量比较小的时候,线程是占优的,任务量大的时候,进程就占优了,进程的例子举不出来,阔以看下表
所以在日常工作时,处理工作量大的时候,进程就是不错的选择了,而像我平时处理小数据的,脚本用线程来处理就是绝佳的了
结尾
讲道理,上面的参考链接举的例子很清楚了,而且讲的也明白,而且我的用法都是单进多线,没啥必要写这篇文章,写了也不全面,但是既然学弟都这么说了,想让我写上一篇,那我只好说说自己的愚见,各大佬不喜勿喷
以上是关于多线程和多进程的区别的主要内容,如果未能解决你的问题,请参考以下文章