多线程和多进程的区别

时间:2022-07-23
本文章向大家介绍多线程和多进程的区别,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

类似前言一样的东西

多线程和多进程各有优缺点,没有哪个是最好,只有在不同情况下,哪种是更好的

参考文章

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资源利用起来了

那么具体什么时候用到多进程呢,因为本人基本上用的都是单进程多线程的,所以解释的会不到位,有意见的大佬可以指出来,马上改

进程和线程的差别,我觉得就是工作量上的问题,任务量比较小的时候,线程是占优的,任务量大的时候,进程就占优了,进程的例子举不出来,阔以看下表

所以在日常工作时,处理工作量大的时候,进程就是不错的选择了,而像我平时处理小数据的,脚本用线程来处理就是绝佳的了

结尾

讲道理,上面的参考链接举的例子很清楚了,而且讲的也明白,而且我的用法都是单进多线,没啥必要写这篇文章,写了也不全面,但是既然学弟都这么说了,想让我写上一篇,那我只好说说自己的愚见,各大佬不喜勿喷