進程、線程和攜程的通俗解釋【劉新宇Python】


 

通過下面這張圖你就能看清楚了,進程、線程和攜程的關系 

 進程:

多個進程是可以運行在多個CPU當中的,比如你的電腦是4核,可以同時並行運行四個進程,這是真正物理上的並行運行。

線程:

每個進程又可以有多個線程,線程是輪詢執行的,因為輪詢的速度很快,所以可以看成是並行。

微線程:

攜程是微線程,一個線程可以分為多個攜程,同樣也是輪詢執行,這樣的好處是減少CPU的資源消耗,一些比較多而且小的事件可以用攜程去處理,減少資源的開銷。

 

 

協程原理
生成器器
def fun1():
  print(100)
  print(200)
  yield # 暫停代碼 保存斷點狀態
  print(100)
  print(100)
  yield
  eventlet
  print(100)
  print(100)

def fun2():
  print(100)
  print(200)
  yield
  print(100)
  print(100)
   yield
  print(100)
  print(100)

gen_obj1 = fun1() # 創建了生成器器對象
gen_obj2 = fun2()
next(gen_obj1)
next(gen_obj2)
next(gen_obj1)
next(gen_obj2)

  

通常采用協程庫(擴展庫)來完成協程開發
協程庫能夠自動幫助完成協程的執行切換

 

eventlet

from multiprocessing import Process
p = Processs()
p.start()
from threading import Thread
t = Thread()
t.start()
from eventlet import Eventlet
e1 = Eventlet()

  e1.start()
  e2 = Eventlet()
  e2.start()

 

  

協程運行socketio服務器器的⽅方式

pip install eventlet

  

import eventlet
eventlet.monkey_patch()
import socketio
import eventlet.wsgi
# Server對象理理解為Flask⾥里里⾯面的應⽤用對象就可以
# sio對象是⽤用來管理理socketio即時通訊業務的
sio = socketio.Server(async_mode='eventlet') #
指明在evenlet模式下
app = socketio.Middleware(sio)
eventlet.wsgi.server(eventlet.listen(('',
8000)), app)

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM