15 并發編程-(IO模型)

一、IO模型介紹

1、阻塞與非阻塞指的是程序的兩種運行狀態

阻塞:遇到IO就發生阻塞,程序一旦遇到阻塞操作就會停在原地,并且立刻釋放CPU資源

非阻塞(就緒態或運行態):沒有遇到IO操作,或者通過某種手段讓程序即便是遇到IO操作也不會停在原地,執行其他操作,力求盡可能多的占有CPU

2、同步與異步指的是提交任務的兩種方式:

同步調用:提交完任務后,就在原地等待,直到任務運行完畢后,拿到任務的返回值,才繼續執行下一行代碼

異步調用:當進程執行到一個IO(等待外部數據)的時候,不需要等待,待數據接收成功后,再回來處理。

?

1.io模型
提交任務得方式:同步:提交完任務,等結果,執行下一個任務異步:提交完,接著執行,異步 + 回調  異步不等結果,提交完任務,任務執行完后,會自動觸發回調函數
同步不等于阻塞:阻塞:遇到io,自己不處理,os會搶走cpu ,解決辦法:監測到io,gevent切換到其他任務,類似欺騙os非阻塞:cpu 運行
IO分類:1.阻塞IO        blocking IO2.非阻塞IO      nonblocking IO3.IO多路復用    IO multiplexing4.信號驅動IO    signal driven IO     用得比較少 5.異步IO        asynchronous IO
遇到IO: 卡網絡IO: 原地阻塞1.server端什么樣得操作屬于IO行為     # accept recv send 阻塞操作   accept recv 明顯得等  send 不會明顯等,但是一種io行為  2.為什么IO行為會讓有在原地等待的效果  3.非阻塞io:
自己監測io 遇到io 就切 并且把 單線程得效率提到最高
導致得問題:1.當有數據來得時候,cpu 在做其他得事情,不會立即響應2.服務端沒有任何阻塞,說白了,就是死循環,cpu會一直運轉,線程處于就緒狀態,大量占用cpu ,做無用,這個線程會一直問cpu,有數據沒,有數據沒
不推薦使用4.多路復用io:wait copy  還多了select  中間有個中介存在,幫問os 有沒有數據但是如果中介 只有1個 效率不如 阻塞效率但是如果中介監測多個套接字 ,性能高就是:同時監測多個套接字問os系統好了沒  就比阻塞io效率高監測套接字得io行為服務端得套接字有幾類:server connselect 阻塞io 效率高比非阻塞io 效率也高 ,一直做無用總結:同時監測多個套接字列表 循環 慢 假設列表數據多,循環 效率低  監測套接字好沒好 從頭到尾 循環1遍select  列表循環  效率低poll   可接收得列表數據多 效率也不高epoll 效率最高得 異步操作 每個套接字身上綁定個回調函數,誰好了誰觸發回調,(就不用去遍歷了 效率低)epoll  windows 不支持linux 支持selectors 模塊  自動根據操作系統選擇pollepoll

?

二、阻塞IO模型

默認情況下,所有的socket都是blocking模型,

實際上,除非特別指定,幾乎所有的IO接口 ( 包括socket接口 ) 都是阻塞型的。

這給網絡編程帶來了一個很大的問題,如在調用recv(1024)的同時,線程將被阻塞,在此期間,線程將無法執行任何運算或響應任何的網絡請求。

blocking IO的特點就是在IO執行的兩個階段(等待數據和拷貝數據兩個階段)都被block了。

?

?

?

?

三、非阻塞IO模型

?

在非阻塞式IO中,用戶進程其實是需要不斷的主動詢問kernel數據準備好了沒有。

from socket import *server = socket(AF_INET, SOCK_STREAM)
server.bind(('127.0.0.1',8083))
server.listen(5)
server.setblocking(False)
print('starting...')rlist=[]
wlist=[]
while True:try:conn, addr = server.accept()rlist.append(conn)print(rlist)except BlockingIOError:# print('干其他的活')#收消息del_rlist = []for conn in rlist:try:data=conn.recv(1024)if not data:del_rlist.append(conn)continuewlist.append((conn,data.upper()))except BlockingIOError:continueexcept Exception:conn.close()del_rlist.append(conn)#發消息del_wlist=[]for item in wlist:try:conn=item[0]data=item[1]conn.send(data)del_wlist.append(item)except BlockingIOError:passfor item in del_wlist:wlist.remove(item)for conn in del_rlist:rlist.remove(conn)server.close()
View Code

四、多路復用IO模型

?

五、異步IO模型

六、各種IO模型對比

七、了解selectors模塊的使用

?

轉載于:https://www.cnblogs.com/foremostxl/p/9738068.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388331.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388331.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388331.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

arduino消息服務器,在C(Arduino IDE)中將API鏈接消息解析為服務器(示例代碼)

我正在使用Arduino IDE來編程我的微控制器,它有一個內置的Wi-Fi芯片(ESP8266 NodeMCU),它連接到我的互聯網路由器,然后有一個特定的IP(就像192.168.1.5)。所以我想通過添加到鏈接的消息發送命令(和數據),然后鏈接變為:…

不提拔你,就是因為你只想把工作做好

2019獨角獸企業重金招聘Python工程師標準>>> 我有個朋友,他30出頭,在500強公司做技術經理。他戴無邊眼鏡,穿一身土黃色的夾克,下面是一條常年不洗的牛仔褲加休閑皮鞋,典型技術高手范。 三 年前,…

python內置函數多少個_每個數據科學家都應該知道的10個Python內置函數

python內置函數多少個Python is the number one choice of programming language for many data scientists and analysts. One of the reasons of this choice is that python is relatively easier to learn and use. More importantly, there is a wide variety of third pa…

C#使用TCP/IP與ModBus進行通訊

C#使用TCP/IP與ModBus進行通訊1. ModBus的 Client/Server模型 2. 數據包格式及MBAP header (MODBUS Application Protocol header) 3. 大小端轉換 4. 事務標識和緩沖清理 5. 示例代碼 0. MODBUS MESSAGING ON TCP/IP IMPLEMENTATION GUIDE 下載地址:http://www.modb…

Hadoop HDFS常用命令

1、查看hdfs文件目錄 hadoop fs -ls / 2、上傳文件 hadoop fs -put 文件路徑 目標路徑 在瀏覽器查看:namenodeIP:50070 3、下載文件 hadoop fs -get 文件路徑 保存路徑 4、設置副本數量 -setrep 轉載于:https://www.cnblogs.com/chaofan-/p/9742633.html

SAP UI 搜索分頁技術

搜索分頁技術往往和另一個術語Lazy Loading(懶加載)聯系起來。今天由Jerry首先介紹S/4HANA,CRM Fiori和S4CRM應用里的UI搜索分頁的實現原理。后半部分由SAP成都研究院菜園子小哥王聰向您介紹Twitter的懶加載實現。 關于王聰的背景介紹&#x…

萬彩錄屏服務器不穩定,萬彩錄屏 云服務器

萬彩錄屏 云服務器 內容精選換一換內網域名是指僅在VPC內生效的虛擬域名,無需購買和注冊,無需備案。云解析服務提供的內網域名功能,可以讓您在VPC中擁有權威DNS,且不會將您的DNS記錄暴露給互聯網,解析性能更高&#xf…

針對數據科學家和數據工程師的4條SQL技巧

SQL has become a common skill requirement across industries and job profiles over the last decade.在過去的十年中,SQL已成為跨行業和職位描述的通用技能要求。 Companies like Amazon and Google will often demand that their data analysts, data scienti…

C# 讀取CAD文件縮略圖(DWG文件)

//C# 讀取CAD文件縮略圖(DWG文件) 楊航收集技術資料,分享給大家 //2010-09-04 16:34:58| 分類: C# |字號 訂閱//在不使用任務插件的情況下讀取DWG文件的縮略圖,以便在沒有安裝AutoCAD的計算機上瀏覽。using System;u…

全排列算法實現

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 https://blog.csdn.net/summerxiachen/article/details/605796231.全排列的定義和公式&#xff1a; 從n個數中選取m&#xff08;m<n&#xff09;個數按照一定的順序進行排成一個列&#xff0c;叫…

14.并發容器之ConcurrentHashMap(JDK 1.8版本)

1.ConcurrentHashmap簡介 在使用HashMap時在多線程情況下擴容會出現CPU接近100%的情況&#xff0c;因為hashmap并不是線程安全的&#xff0c;通常我們可以使用在java體系中古老的hashtable類&#xff0c;該類基本上所有的方法都采用synchronized進行線程安全的控制&#xff0c;…

modbus注意幾點

1、 在利用Modbus通訊的過程中&#xff0c;遇到這樣一個問題&#xff0c;即浮點數的傳輸問題。因為一般浮點數都是32位&#xff0c;而Modbus總線中只能傳輸最多16位的數據。解決方法&#xff1a;可以利用兩個整形數傳送一個浮點數&#xff08;即將一個32位的二進制數分割成兩個…

服務器虛擬化網口,服務器安裝虛擬網口

服務器安裝虛擬網口 內容精選換一換Atlas 800 訓練服務器(型號 9010)安裝上架、服務器基礎參數配置、安裝操作系統等操作請參見《Atlas 800 訓練服務器 用戶指南 (型號9010)》。Atlas 800 訓練服務器(型號 9010)適配操作系統如表1所示。請參考表2下載驅動和固件包。Atlas 800 訓…

芒果云接嗎_芒果糯米飯是生產力的關鍵嗎?

芒果云接嗎Would you like to know how your mood impact your sleep and how your parents influence your happiness levels?您想知道您的心情如何影響您的睡眠以及您的父母如何影響您的幸福感嗎&#xff1f; Become a data nerd, and track it!成為數據書呆子&#xff0c;…

hdoj4283 You Are the One

題意&#xff1a;每個人出場時獲得等待時間*值的unhappy值。有個棧換出場順序。問怎樣最小&#xff1f; 一開始的時候覺得在中間取斷點&#xff0c;dp[i][j]表示區間全出場后的最小值。那么dp[i][j]dp[i][k]dp[k1][j]&#xff0c;但這樣是不行的。因為有可能最優解是[i][k]只出…

laravel-admin 開發 bootstrap-treeview 擴展包

laravel-admin 擴展開發文檔https://laravel-admin.org/doc... 效果圖&#xff1a; 開發過程&#xff1a; 1、先創建Laravel項目&#xff0c;并集成laravel-admin&#xff0c;教程&#xff1a; http://note.youdao.com/notesh... 2、生成開發擴展包 php artisan admin:extend c…

怎么看服務器上jdk安裝位置,查看云服務器jdk安裝路徑

查看云服務器jdk安裝路徑 內容精選換一換用戶可以在公有云MRS集群以外的節點上使用客戶端&#xff0c;在使用客戶端前需要安裝客戶端。如果集群外的節點已安裝客戶端且只需要更新客戶端&#xff0c;請使用安裝客戶端的用戶例如root。針對MRS 3.x之前版本的集群&#xff0c;需要…

公司生日會生日禮物_你的生日有多受歡迎?

公司生日會生日禮物In the years before 2020, it was common for a large number of school children (20–30 or more) to physically colocate for their math lessons. And in many a class, students were asked to compute the probability that two of them had the sam…

Django思維導圖

轉載于:https://www.cnblogs.com/liangying666/p/9744477.html