poll函數(shù)編程教學 在非阻塞模式上怎么知道recv接收數(shù)據(jù)完成?
在非阻塞模式上怎么知道recv接收數(shù)據(jù)完成?以linux下的tcp socket編程為例:阻塞是指recv/read時,如果socket接收緩沖區(qū)有數(shù)據(jù),我會一直保持清醒,直到有數(shù)據(jù)來了,我才讀完。在
在非阻塞模式上怎么知道recv接收數(shù)據(jù)完成?
以linux下的tcp socket編程為例:阻塞是指recv/read時,如果socket接收緩沖區(qū)有數(shù)據(jù),我會一直保持清醒,直到有數(shù)據(jù)來了,我才讀完。
在發(fā)送/寫的時候,如果發(fā)送緩沖區(qū)滿了,沒有空間繼續(xù)發(fā)送,我就睡覺,磨蹭,直到發(fā)送緩沖區(qū)騰出足夠的空間讓我把所有的數(shù)據(jù)都塞進發(fā)送緩沖區(qū)。
(當然,如果你通過setsockopt設置了讀寫超時,超時到期后仍然會返回-1和EAGAIN,不會等待睡眠。)
非阻塞是指在recv/read時,如果接收緩沖區(qū)有數(shù)據(jù)并且我讀完了,如果沒有數(shù)據(jù),我會直接帶著返回的-1和EGAIN離開,絕不會休眠等待任何延遲。
寫/發(fā)送時,如果發(fā)送緩沖區(qū)有足夠的空間,立即將數(shù)據(jù)放入發(fā)送緩沖區(qū),然后離開。如果發(fā)送緩沖區(qū)已滿,空間不足,直接用返回的-1和EAGAIN離開。至于IO多路復用,首先要理解的是操作系統(tǒng)為你提供了一個功能。當你的一個套接字接收緩沖區(qū)有數(shù)據(jù)要讀或者發(fā)送緩沖區(qū)有空間要寫時,它會給你一個通知。
這樣在配合非阻塞socket使用的時候,我只會在系統(tǒng)通知我可以讀取哪個描述符的時候進行讀取操作,這樣可以保證我每次讀取的時候都能讀取到有效數(shù)據(jù),除了return -1和EAGAIN我什么都不會做。
寫操作是相似的。
操作系統(tǒng)的這個功能被select/poll/epoll等系統(tǒng)調用函數(shù)使用,可以同時監(jiān)控多個描述符的讀寫準備情況,使得多個描述符的I/O操作可以在一個線程中完成,稱為I/O復用。,其中 "再利用和指的是同一線程的重用。至于事件驅動,其實是I/O復用的另一種叫法。至于異步同步,我們在linux下常見的網絡編程模型大多是同步io。以讀操作為例,本質上用戶需要調用re。Ad/recv在處理業(yè)務邏輯之前從內核緩沖區(qū)讀取數(shù)據(jù)。
異步io意味著內核已經讀取了數(shù)據(jù),用戶直接處理邏輯。
異步IO一般使用linux下的aio庫。
java初學推薦書籍有哪些?
排名不分先后
Effective Java
了解過Java的人應該或多或少聽過這本書,堪稱經典。書中主要列舉了一些知識點,然后分別對這些知識點進行闡述。內容相當深入,推薦有基礎的人閱讀。
Thinking with Java 4
Java思維被譽為Java圣經。不管你處于什么階段,每次看都能有所收獲。所以,對于初學者來說,這本書有褒有貶。你自己想想。
Java并發(fā)編程實踐
外國人寫的書,這是翻譯版,原著《Java Concurrency in Practice》,堪稱并發(fā)中的經典之作。翻譯的也很好,書內容偏理論,基本知識點都能概括。當然這本書還是要適合有一點并發(fā)基礎的人,零基礎的看起來會有點吃力。這本書可以大量閱讀。一遍又一遍,你不看一遍也會有新的理解。
對Java虛擬機的深刻理解
這本書也很經典,作者是國內的,在市場泛濫的今天,也算是上品了。書中對JVM進行了詳細而深刻的講解,是學習JVM原理的必備書籍。
頭部優(yōu)先設計模式
Head first系列教材,看起來特別輕松,圖文并茂,通俗易懂,適合初學者選擇。
重構——改進現(xiàn)有代碼的設計
書中給出了70多個可行的重構,每個重構都介紹了一個經過驗證的代碼轉換技術的動機和技術。本書中提出的重構標準將幫助您一次一小步地修改代碼,從而降低開發(fā)過程中的風險。
MySQL技術內幕
本文從源代碼的角度深入分析了InnoDB的體系結構、實現(xiàn)原理和工作機制,并給出了大量的最佳實踐,可以幫助您系統(tǒng)深入地掌握InnoDB,更重要的是可以為您設計和管理高性能、高可用的數(shù)據(jù)庫系統(tǒng)提供優(yōu)秀的指導。
另外,我可以和大家分享一下這幾年收集的關于Java三個方面的書籍。大概有幾個G 你可以通過回復 "Java書籍和雜志在后臺。如果對你有幫助,請點擊喜歡。