python多线程和java多线程的区别,python的多进程和多线程
什么?
和线程概念:
是进程资源消耗的最小单位。
它是线程内核调度的最小单位。
进程和线程之间的主要区别:
进程相互独立,主进程通过fork)系统调用从子进程派生而来。
线程共享内存区,主线程派生子线程。
为什么?
进程和线程的优缺点:
流程:
优点:因为每个进程都有自己的内存空间,所以更稳定,不受子进程影响。但是,如果主进程崩溃,它将成为全局进程。另外,python不受GIL(全局解释器锁)的限制,可以有效利用多核cpu。
缺点:内存资源占用大,创建进程的成本高于线程。
线程:
优点:由于内存空间共享,资源消耗低,成本低于进程。在python中,由于GIL的限制,只能使用一个cpu核,所以一次只能运行一个线程。
缺点:共享内存空间也有缺点,比如资源征用(python中可以通过锁机制限制),如果一个线程崩溃,整个进程都可能崩溃。
Fork))系统调用:
是一个相对特殊的系统调用,用于在unix/linux上创建子进程。其他系统调用函数比较特殊,通常在一次调用中返回一次,fork调用中返回的子进程的pid总是0。
在哪里?(用python思考)
多进程多线程的共同目标是实现多任务。
任务类型:高cpu和I/o负载
Cpu密集型:需要多进程充分利用多核cpu实现真正的并发。
I/o密集型:多线程可用于节省资源。
什么?
python中如何使用多进程多线程编程?
多线程操作
Python为多线程支持提供了两个基本库。下线模块和上线模块。
实施原则:
同时执行的代码作为一个参数传递给线程。Thread()制作一个thread对象,而thread对象start)可以结合程序控制结构(loop)多次调用。
代码示例:(并发套接字通信服务器()的多线程实现)。
导入线程库
导入导入套接字# #套接字
S=socket.socket #创建套接字对象
S.bind((0.0.0.0),8888) # bind套接字
听s.Listen(10) # socket
DEF): #定义处理函数
sock,addr=s.accept
虽然正确:
a=sock.recv(1024)).
如果a:
sock.send(a.upper))
否则:
袜子. close(
黑色
if __name__==__main__ :
ForIinxrange(20): #)基于for循环创建20个线程
t=threading . thread(target=run)#创建一个线程对象
运行t.start线程
本例的第二种格式:
导入线程库
导入导入套接字# #套接字
S=socket.socket #创建套接字对象
S.bind((0.0.0.0),8888) # bind套接字
听s.Listen(10) # socket
我的线程(threading.thread):
Defrun(self): #定义处理函数
sock,addr=s.accept
虽然正确:
a=sock.recv(1024)).
如果a:
sock.send(a.upper))
否则:
袜子. close(
黑色
if __name__==__main__ :
ForIinxrange(20): #)基于for循环创建20个线程
创建t=Mythread线程对象
运行t.start线程
2.多进程
Python在多进程模块中提供了用于创建进程对象的进程类,用于创建进程池对象的池类,以及通过队列和管道的进程间通信。
实施原则:
同时执行的代码作为独立变量传递给多处理。Process()做一个流程对象(流程对象启动),然后用程序控制结构(循环)结合多次调用完成。
代码示例:(通过多个进程实现并发套接字通信服务器())。
导入多进程# #线程库
导入导入套接字# #套接字
S=socket.socket #创建套接字对象
S.bind((0.0.0.0),8888) # bind套接字
听s.Listen(10) # socket
DEF): #定义处理函数
sock,addr=s.accept
虽然正确:
a=sock.recv(1024)).
如果a:
sock.send(a.upper))
否则:
袜子. close(
黑色
if __name__==__main__ :
ForIinxrange(20): #)基于for循环创建20个线程
t=multi process . process(target=run)#创建一个线程对象
运行t.start线程
可以确认在ps aux grep python中运行了20个进程。
同上:也可以通过自定义类,继承Process类来重新实例化对象。
总之,并发是多任务情况下不可避免的问题。虽然多进程和多线程可以并发,但两者都有不可避免的缺点。所以像nginx这样通过单进程或者单线程处理并发任务是基于事件驱动的,用python实现这种机制叫做concordance。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。