成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

五分鐘幫您理解Linux網絡核心知識點——Socket和Epoll

開發 前端
當有客戶端連接服務端時,服務端 Socket 文件中會寫入這個客戶端 Socket 的文件描述符。進程可以通過 accept() 方法,從服務端 Socket 文件中讀出客戶端的 Socket 文件描述符,從而拿到客戶端的 Socket 文件。

關于linux網絡相關的基礎知識點,最熱的兩個就是socket和epoll,接下來我就用最簡單的方式把他倆說清楚便于大家理解!

Socket

Socket 是一種進程間通信的方法,它允許位于同一主機(計算機)或使用網絡連接起來的不同主機上的應用程序之間交換數據。

Socket起源于Unix,而Unix/Linux基本哲學之一就是“一切皆文件”,都可以用“打開open> 讀寫write/read > 關閉close”模式來操作。Socket就是該模式的一個實現,socket即是一種特殊的文件,一些socket函數就是對其進行的操作(讀/寫IO、打開、關閉)

Socket實現細節

當有客戶端連接服務端時,服務端 Socket 文件中會寫入這個客戶端 Socket 的文件描述符。進程可以通過 accept() 方法,從服務端 Socket 文件中讀出客戶端的 Socket 文件描述符,從而拿到客戶端的 Socket 文件。

程序猿實現一個網絡服務器的時候,會先手動去創建一個服務端 Socket 文件。服務端的 Socket 文件依然會存在操作系統內核之中,并且會綁定到某個 IP 地址和端口上。以后凡是發送到這臺機器、目標 IP 地址和端口號的連接請求,在形成了客戶端 Socket 文件之后,文件的文件描述符都會被寫入到服務端的 Socket 文件中。

應用只要調用 accept 方法,就可以拿到這些客戶端的 Socket 文件描述符,這樣服務端的應用就可以方便地知道有哪些客戶端連接了進來。而每個客戶端對這個應用而言,都是一個文件描述符。如果需要讀取某個客戶端的數據,就讀取這個客戶端對應的 Socket 文件。如果要向某個特定的客戶端發送數據,就寫入這個客戶端的 Socket 文件。



epoll

與 socket 的交互,最核心的場景就是網絡 IO 的處理, epoll 會協助我們高效完成。我們新建立一個網絡 socket 的時候,交給 epoll 就可以了,當網絡 IO 有數據到來時它會通知我們,當我們要往網絡 IO 寫數據時,epoll 也會自動幫我們發送,本質上epoll實現了IO 多路復用

Epoll數據結構如下:

· rbr:被 epoll 所管理的所有 socket 都存儲在紅黑樹中。

· rdllist:存儲著所有就緒的 socket(所謂"就緒",意思指有網絡數據到來,或者有數據要發送出去。)

就緒列表是 epoll 能夠高效的核心,對于每一個就緒的 socket,會直接放入 rdllist 中,epoll_wait 獲取到就緒的 socket 時,直接從 rdllist 中進行獲取就可以了,無需再進行查找。epoll 是基于事件回調機制地,當 epoll 所管理地 socket 有數據到來時,會觸發事件回調函數,將就緒的 socket 放置在 rdllist 中,并且通知 epoll_wait 所在的進程來處理數據。epoll的優點如下:

  • 支持海量并發連接。
  • 使用時間復雜度為 O(logn)的紅黑樹管理所有的 socket。
  • 提高 CPU 的使用率,高效地使用 CPU 時間片處理所管理的 socket 連接。
  • 基于事件回調機制處理消息,而不是主動輪詢機制。

除了epoll,內核還提供了select和poll,但是二者效率較差,這里就不再進行介紹了。

最后的總結

不同的客戶端與服務端通信通過Socket實現,而epoll使得通信變更加高效!

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-04-08 07:51:31

JavaJVM垃圾回收

2021-01-15 08:35:49

Zookeeper

2020-11-06 00:50:16

JavaClassLoaderJVM

2021-12-30 08:17:27

Springboot數據訪問DataSourceB

2025-01-07 14:10:46

SpringBoot開發Java

2020-05-19 14:40:08

Linux互聯網核心

2012-10-12 09:23:04

JavaEEUMLObject

2024-09-18 08:21:24

JavaScriptTypeScriptprototype

2019-08-09 10:33:36

開發技能代碼

2021-01-06 13:52:19

zookeeper開源分布式

2020-10-26 10:40:31

Axios前端攔截器

2023-07-26 07:11:50

LVM底層抽象

2011-08-08 09:22:10

Python

2021-04-13 08:25:12

測試開發Java注解Spring

2024-03-04 08:10:00

C#多線程語言

2024-11-04 09:00:00

Java開發

2025-03-26 11:30:40

2021-01-11 09:33:37

Maven數目項目

2023-12-06 08:48:36

Kubernetes組件

2024-04-23 14:25:16

Python備忘清單
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 最新免费视频 | av在线免费不卡 | 超碰天天 | 超碰激情 | 97色免费视频| 艹逼网| 久久人操 | 国产精品一区二区av | 国产一区二区精品在线 | 成人免费网视频 | 成人依人| 亚洲av毛片 | 亚洲人人舔人人 | 国产一区二区三区四区三区四 | 日本色综合 | av大片在线 | 亚洲精品久久久久久久久久久久久 | www.日本精品| 999精品在线观看 | 免费精品一区 | 91精品一区二区三区久久久久久 | 国产高清精品一区二区三区 | www.日韩欧美 | 成人免费看黄网站在线观看 | av中文字幕在线 | 日韩免费激情视频 | 中文字幕高清一区 | 国产精品毛片av一区 | 欧美成年视频 | 午夜免费观看网站 | 99re6在线视频精品免费 | 亚洲一区二区在线电影 | 国产成人在线视频播放 | 女人精96xxx免费网站p | 国产自产21区 | 亚洲国产精品久久 | 毛片一区二区 | 黄色av网站在线观看 | 一区二区三区日韩 | 成人一级片在线观看 | 亚洲va国产日韩欧美精品色婷婷 |