多线程和多进程的区别

Posted E条咸鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程和多进程的区别相关的知识,希望对你有一定的参考价值。

类似前言一样的东西

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

参考文章

https://blog.csdn.net/lishenglong666/article/details/8557215 ---优秀的分割线---

首先先从大概念来解释多线程和多进程的区别,多线程就是CPU资源的分配,多进程就是电脑内存的分配


举个例子,进程相当于公路,线程相当于是分岔路 电脑需要一条公路来运输数据,但是不同的数据有不同的目的地

但是开新的公路代价太高,所以可以在一条公路上分成两条、三条道

不需要的时候小道就销毁掉,需要就再开

多线程相比于多进程来说,线程创建、销毁的代价低,其次进程多了,内存占用的也多,但是CPU利用率低

但是也不是说多进程就一无是处,多进程的可靠性比多线程高,因为进程和进程之间不会互相影响,而多线程有可能会因为一个线程的爆炸而导致进程崩溃

在网上看到的一篇关于这个的表,觉得不错,故而转载

举个用多线程的例子根据上面的优缺点来判断,需要频繁创建、销毁的优先用线程拿之前培训的一个脚本来说

 
   
   
 
  1. #coding=utf-8

  2. import socket

  3. import threading

  4. import time

  5. #创建socket

  6. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  


  7. #监听端口

  8. s.bind(("127.0.0.1",8888))

  9. print("Success")

  10. #指定等待最大连接数量

  11. s.listen(5)


  12. def tcp(sock,addr):

  13.    print ("connection from %s:%s " % addr)

  14.    sock.send(b"welcome, what's your name") #发送数据给客户端

  15.    while True:

  16.        data = sock.recv(100)

  17.        time.sleep(1)

  18.        if data=="exit":

  19.            sock.send(b"quit")

  20.            break

  21.        sock.send(b"hello "+data)

  22.    sock.close()


  23. while True:

  24.    sock,addr = s.accept() #接受所有来自客户端的内容

  25.    t = threading.Thread(target=tcp,args=(sock,addr)) #创建线程

  26.    t.start() #开启线程

26-29是多线程的部分,这里的作用呢,就是来一个用户,就开启一个线程,去处理这个用户的请求,当用户断开连接时,就销毁线程


还有一个场景,就是需要进行大量计算,或者处理大量数据的,也可以用到多线程比如说用扫描网站的工具扫描网站后台,只有一个线程去处理这一个网站时,他需要单独的去完成3000+个的枚举,但是假如有60个线程的话,那么每个线程就只需要500+个的枚举,加快速度的同时将空闲的CPU资源利用起来了

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

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

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

结尾

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


以上是关于多线程和多进程的区别的主要内容,如果未能解决你的问题,请参考以下文章

多线程和多进程的区别

多线程和多进程模式有啥区别

多进程和多线程有啥区别?

python中的多线程和多进程编程

python多进程和多线程的区别

Linux 多线程和多进程的区别