python多线程和java多线程的区别,python的多进程和多线程

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: