网络编程中设计并发服务器,使用多进程与多线程 ,请问有什么区别?

网络编程中设计并发服务器,使用多进程与多线程 ,请问有什么区别?,第1张

产生进程的开销要比线程的开销更大。如果你的服务器连接的客户端的数量比较少,那么进程和线程在效率方面的差别感觉并不大。如果数量很大,比如1000,甚至更多,如果你用进程,那么响应完1000+的客户端连接就会变得很慢,因为你要把资源复制1000多份;但是用线程,它们共享同一个进程里的资源,就不需要花那么大的开销去响应客户端的连接。

在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。多进程是实现并发的手段之一,需要注意的问题是:

例如当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程,十几个还好,但如果是上百个,上千个。。。手动的去限制进程数量却又太过繁琐,此时可以发挥进程池的功效。

我们就可以通过维护一个进程池来控制进程数目,比如httpd的进程模式,规定最小进程数和最大进程数..

ps: 对于远程过程调用的高级应用程序而言,应该使用进程池,Pool可以提供指定数量的进程,供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,就重用进程池中的进程。

创建进程池的类:如果指定numprocess为3,则进程池会从无到有创建三个进程,然后自始至终使用这三个进程去执行所有任务,不会开启其他进程

参数介绍:

方法介绍:

主要方法:

其他方法(了解部分)

应用:

发现:并发开启多个客户端,服务端同一时间只有3个不同的pid,干掉一个客户端,另外一个客户端才会进来,被3个进程之一处理

回调函数:

需要回调函数的场景:进程池中任何一个任务一旦处理完了,就立即告知主进程:我好了额,你可以处理我的结果了。主进程则调用一个函数去处理该结果,该函数即回调函数

我们可以把耗时间(阻塞)的任务放到进程池中,然后指定回调函数(主进程负责执行),这样主进程在执行回调函数时就省去了I/O的过程,直接拿到的是任务的结果。

如果在主进程中等待进程池中所有任务都执行完毕后,再统一处理结果,则无需回调函数

产生进程的开销要比线程的开销更大。如果你的服务器连接的客户端的数量比较少,那么进程和线程在效率方面的差别感觉并不大。如果数量很大,比如1000,甚至更多,如果你用进程,那么响应完1000+的客户端连接就会变得很慢,因为你要把资源复制1000多份;但是用线程,它们共享同一个进程里的资源,就不需要花那么大的开销去响应客户端的连接。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/727068.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-10
下一篇2023-08-10

发表评论

登录后才能评论

评论列表(0条)

    保存