併發伺服器程式設計模型
在併發伺服器程式設計模型中,最簡單的就是父程序監聽外來連線請求,一旦請求到來,父程序fork()子程序處理連線,與外來客戶端進行互動。
此時通用的做法是:父程序copy自己的地址空間給子程序,此時子程序擁有與父程序相同的開啟的檔案描述符!即,父子程序都有一個監聽套接字、一個連線套接字。連線建立後,父程序關閉連線套接字,子程序關閉監聽套接字。
我們知道,呼叫close()關閉套接字會導致tcp傳送FIN分節。
但是為什麼父子程序關閉這兩個套接字沒有導致連線的斷開?
其實,在每個檔案描述符或者套接字都有一個引用計數機制。只有當它的引用計數變為0的時候才會真正清理和釋放該套接字的資源。
還有一個問題就是,如果父程序從來都不關閉連線套接字那會怎麼辦?
由於任何程序在任何時刻可擁有的開啟著的描述符數量通常是有限制的。如果父程序不關閉連線套接字會導致套接字資源的耗盡,而且,沒有一個客戶連線會被終止。因為這些連線套接字的引用計數值永遠是1,不可能為0.
相關推薦
併發伺服器程式設計模型
在併發伺服器程式設計模型中,最簡單的就是父程序監聽外來連線請求,一旦請求到來,父程序fork()子程序處理連線,與外來客戶端進行互動。 此時通用的做法是:父程序copy自己的地址空間給子程序,此時子程序擁有與父程序相同的開啟的檔案描述符!即,父子程序都有一個監聽套接字、一個連線套接字。連線建
5種常用的伺服器程式設計模型
http://www.cricode.com/3510.html 1.同步阻塞迭代模型 同步阻塞迭代模型是最簡單的一種IO模型。 其核心程式碼如下: 12345678bind(srvfd);listen(srvfd);for(;;){cli
Linux C網路程式設計 ————6、IO複用併發伺服器程式設計
伺服器端程式碼實現#include<stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h>
linux-socket tcp客戶端伺服器程式設計模型及程式碼詳解
上一篇文章介紹了 TCP/IP相關協議,socket通訊流程和涉及到的各種函式: 本篇將具體解釋tcp客戶端伺服器程式設計模型相關的程式碼 文章分為4個部分: 1. TCP客戶端伺服器程式設計模型流程圖 2. 網路位元組序與主機位元組序 3.
linux僵死程序與併發伺服器程式設計
序 僵死(zombie)程序簡而言之就是:子程序退出時,父程序並未對其發出的SIGCHILD訊號進行適當處理,導致子程序停留在僵死狀態等待其父程序為其收屍,這個狀態下的子程序就是僵死程序。 因為併發伺服器常常fork很多子程序,子程序終結之後需要伺服器程序去wait清理資源
Linux 網路程式設計——併發伺服器的三種經典實現模型
伺服器設計技術有很多,按使用的協議來分有 TCP 伺服器和 UDP 伺服器,按處理方式來分有迴圈伺服器和併發伺服器。 迴圈伺服器與併發伺服器模型 在網路程式裡面,一般來說都是許多客戶對應一個伺服器(多對一),為了處理客戶的請求,對服務端的程式就提出了特殊的要求。
《Linux網路程式設計》: 併發伺服器的三種實現模型
迴圈伺服器與併發伺服器模型 伺服器設計技術有很多,按使用的協議來分有 TCP 伺服器和 UDP 伺服器,按處理方式來分有迴圈伺服器和併發伺服器。 在網路程式裡面,一般來說都是許多客戶對應一個伺服器(多對一),為了處理客戶的請求,對服務端的程式就提出了特殊的要求。 目前最
Linux學習之網路程式設計(多程序併發伺服器)
言之者無罪,聞之者足以戒。 - “詩序” 上面我們所說過的通訊都是一個伺服器一個客戶端之間的通訊,下面我們來交流一下多程序併發伺服器的相關知識 邏輯上就是這個樣子的,就是一個伺服器多個客戶端進行資料的傳輸。 1、傳送資料的函式: ssize_t send(int sockfd,
併發程式設計模型總結
一:並行工作者模型 並行工作模型主要是有多個工作者,每個工作者單獨完成一個事件。 如下圖 委派器將任務分配給Worker,Worker單獨完成任務,java 7 中 java.util.concurrent 包中好多工具都是基於此模型實現的。明視訊記憶體在的存在的問題是工作器之間需
網路伺服器程式設計——重疊IO模型
4.3.4重疊I/O模型 非同步IO和同步IO的區別: 同步IO中,執行緒啟動一個IO操作然後就立即進入等待狀態,直到IO操作完成後才醒來繼續執行。 非同步IO中,執行緒傳送一個IO請求到核心,然後繼續處理其他的事情,核心完成IO請求後,將會通知執行緒IO操作完成了。重疊IO屬於非同步I
網路伺服器程式設計——事件選擇模型
4.3.3事件選擇模型 事件選擇模型將每個套接字和每個WSAEVENT物件對應起來,並且在註冊的時候指定需要關注的哪些網路事件。 缺陷:不能同時處理多個套接字,只能同時處理一個事件對應的套接字;一個執行緒中處理的套接字有限,一般為64;應用程式中要處理大於64個套接字,必須額外建立執行緒。
網路伺服器程式設計——非同步選擇模型
4.3.2非同步選擇模型 非同步選擇WSAAsyncSelect是Select模型的非同步版本。在Select模型中,呼叫select()函式會發生阻塞;而WSAAsyncSelect模型在呼叫WSAAsyncSelect()函式時,它會通知系統感興趣的網路事件,然後立即返回。 在前面,我們
網路程式設計和併發之IO模型
一、IO模型介紹 Stevens在文章中一共比較了五種IO Model: * blocking IO 阻塞IO * nonblocking IO
linux網路程式設計之多程序併發伺服器
1)使用多程序併發伺服器考慮的因素: (1)父程序描述最大檔案描述符的個數(父程序需要關閉accept返回的新檔案描述符) (2)系統內可建立程序的個數(與記憶體大小相關) (3)程序建立過多是否降低整體服務效能 2)多程序建立併發
嵌入式Linux網路程式設計,TCP多併發伺服器,TCP多執行緒併發伺服器,TCP多程序併發伺服器
文章目錄 1,TCP多執行緒併發伺服器 1.1,標頭檔案net.h 1.2,客戶端client.c 1.3,伺服器端server.c 2,TCP多程序併發伺服器 2.1,標頭檔案net.h 2.2,客
併發程式設計模型詳解
現在的處理器使用寫緩衝區臨時儲存向記憶體寫入資料。寫緩衝區可以保證指令流水線持續執行,他可以避免與處理器停頓下來等待向記憶體寫入資料而產生的延遲。同時,通過一批處理的方式重新整理寫緩衝區,以及合併寫緩衝區中對同一個記憶體地址的多次寫,減少對記憶體匯流排的佔用。雖
Actor併發程式設計模型淺析
一.Actor模型介紹 在單核 CPU 發展已經達到一個瓶頸的今天,要增加硬體的速度更多的是增加 CPU 核的數目。而針對這種情況,要使我們的程式執行效率提高,那麼也應該從併發方面入手。傳統的多執行緒方法又極其容易出現 Bug 而難以維護,不過別擔心,今天將要介紹另一種併發的模式能一定程度解決這些問題,那就是
高效能伺服器端網路程式設計模型
上一篇文章《Java 程式設計師也需要了解的 IO 模型》中講到伺服器端高效能網路程式設計的核心在於架構,而架構的核心在於程序-執行緒模型的選擇。本文將主要介紹傳統的和目前流行的程序-執行緒模型,在講程序-執行緒程模型之前需要先介紹一種設計模式: Reactor&n
Linux網路程式設計之高階併發伺服器(轉)
1. 介紹 在上一節,我們介紹了Linux簡單的併發伺服器,通過在伺服器端建立多個子程序,來接收客戶端的請求,實現併發處理,但這種方式明顯有缺陷,伺服器並不知道客戶端請求的數量,所以事先建立的程序數不好確定。所以,這裡介紹三種高階併發伺服器模式。第一種是伺服器端統一
Storm WordCount程式設計模型,併發度&分組策略
程式設計模型: Spout /** * @program: WordCountSpout.class * @description: 傳輸資料到bolt,有一個抽象類BaseRichSpout,BaseRichBolt,一個介面IRichSpout,IRichBolt, * 常