交換機控制軟件的實現步驟猜測

一、主要目的

? ? 提出對交換機軟件控制邏輯的猜測。

?

二、交換機控制軟件的組成

? (一)背景

? ? ? 1、交換機有很多的RJ45水晶頭端口。

? ? ? 2、每個端口支持同時發送和接收字節數據。

? ? ? 3、每個端口接收的數據需要查表后才能轉發給目標端口。

?

? (二)端口狀態掃描線程

? ? ? ? 負責掃描每個端口的狀態,如果連接了雙絞線,就開啟對應的發送線程,接收線程;如果斷開連接,就通知線程關閉。

?

? 主要邏輯:

// 循環每個端口

for(int k = 0; k < len; k++){

? ? ?// 如果端口是建立了連接,并且沒有啟動接收和發送線程

? ? ? if(ports[k]是連通的? &&? ports[k]沒有啟動收發線程){

? ? ? ? ? ?// 啟動對應端口的發送線程

? ? ? ? ? ?start_send_thread(ports[k]);

?

? ? ? ? ? ?// 啟動對應端口的接收線程? ? ?

? ? ? ? ? ?start_recv_thread(ports[k]);

?

? ? ? ?} else if(ports[k]是斷開的? &&? ports[k]啟動了收發線程){

? ? ? ? ? ? // 停止對應端口的發送線程

? ? ? ? ? ?stop_send_thread(ports[k]);

?

? ? ? ? ? ?// 停止對應端口的接收線程? ? ?

? ? ? ? ? ?stop_recv_thread(ports[k]);

? ? ? ? }

}

?

? (三)每個端口的接收線程

? ? ? ? 接收端口的數據包,獲得目標RJ45端口號,發給目標端口號的數據發送隊列里。

while(退出為假){

? ? ? // 阻塞接收當前端口的字節數據

?

? ? ? // 獲取數據包中的目標MAC地址

?

? ? ? // 通過查表,獲取對應的水晶頭端口號

? ? ? if(端口號存在){

? ? ? ? ? ?// 獲得目標端口對應的發送線程的隊列

?

? ? ? ? ? // 把數據包入隊到目標端口發送線程的發送隊列里

? ? ? ?} else {

? ? ? ? ? ?// 丟棄該數據包

? ? ? ?}

}

?

? (四)每個端口的發送線程

? ? ? ? 從發送隊列里出隊數據包,發給和端口相連的設備。

while(退出為假){

? ? ? // 阻塞出隊一個數據包

? ? ? Data data = queue.deQueue();

?

? ? ?// 通過雙絞線發給相連的設備(另一臺交換機、路由器、電腦主機)

? ? ?pin.send(data);

}

? ? ?

?

三、總結

? ? 1、全雙工通信需要占用2根線路(發送和接收各自一根),需要開啟兩個線程。

?

? ? 2、多個線程執行同一個方法的時候要添加排他鎖。

?

? ? 3、發現通信狀態發生改變,只能是不斷定時循環判斷。

?

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

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

相關文章

Part1:基于國內源完成Kubernetes集群部署

集群規劃 操作系統&#xff1a;CentOS7 內核版本&#xff1a;5.4&#xff08;需升級&#xff09; 組件版本說明操作系統內核5.4RPM方式升級docker26.1.4yum安裝cri-docker0.3.16二進制安裝kubeadm1.30.11yum安裝kubealet1.30.11yum安裝kubectl1.30.11yum安裝kubectl1.30.11yu…

中考英語之10難點單詞

A abandon ~動詞&#xff0c;意為 “拋棄&#xff1b;放棄”。 ~例如 He abandoned his old bike by the roadside.&#xff08;他把他的舊自行車扔在路邊。&#xff09; absolute ~形容詞&#xff0c;“絕對的&#xff1b;完全的”。 ~例如 We have absolute trust in him…

【GPT入門】第24課 langfuse介紹

【GPT入門】第24課 langfuse介紹 1. langfuse概念與作用2. 代碼3. 頁面效果4. 設計模式1. 裝飾器模式2. 上下文管理模式1. langfuse概念與作用 Langfuse是一款專為大規模語言模型(LLM)應用開發設計的開源平臺。其作用主要包括以下幾個方面: 提升開發效率:通過消除LLM應用構…

在 React 中使用 Web Components 的實踐操作

前言 在現代前端開發中&#xff0c;React 和 Web Components 都是廣泛使用且備受歡迎的技術。React 是一個用于構建用戶界面的 JavaScript 庫&#xff0c;提供了組件化的開發方式和高效的狀態管理&#xff0c;而 Web Components 是一套原生的瀏覽器技術標準&#xff0c;允許開…

C++單例模式精解

單例模式&#xff08;重點*&#xff09; 單例模式是23種常用設計模式中最簡單的設計模式之一&#xff0c;它提供了一種創建對象的方式&#xff0c;確保只有單個對象被創建。這個設計模式主要目的是想在整個系統中只能出現類的一個實例&#xff0c;即一個類只有一個對象。 將單…

【微服務】java中http調用組件深入實戰詳解

目錄 一、前言 二、http調用概述 2.1 什么是http調用 2.1.1 http調用步驟 2.2 HTTP調用特點 2.3 HTTP調用應用場景 三、微服務場景下http調用概述 3.1 微服務開發中http調用場景 3.2 微服務組件中http的應用 四、常用的http調用組件 4.1 java中常用的http組件介紹 4…

Implementing SAP BPC Embedded - 2nd Edition

Implementing SAP BPC Embedded - 2nd Edition

stm32第四天控制蜂鳴器

一&#xff1a; 1.蜂鳴器的種類 蜂鳴器是一種常用的電子發聲元器件&#xff0c;采用直流電壓供電。廣泛應用于計算機&#xff0c;打ED機&#xff0c;報警器&#xff0c;電子玩具&#xff0c;汽車電子設備燈等產品中常見的蜂鳴器可分為有源蜂鳴器和無源蜂鳴器。 2.蜂鳴器的控制…

Swift 中 associatedtype 的用法詳解

目錄 前言 1.什么是associatedtype 2.associatedtype 的作用 1.讓協議支持泛型 2.讓協議支持不同的數據類型 3.結合 where 關鍵字限制類型 4.什么時候使用 associatedtype 5.總結 前言 在 Swift 語言中&#xff0c;泛型&#xff08;Generics&#xff09;是一個非常強大…

每日Attention學習26——Dynamic Weighted Feature Fusion

模塊出處 [ACM MM 23] [link] [code] Efficient Parallel Multi-Scale Detail and Semantic Encoding Network for Lightweight Semantic Segmentation 模塊名稱 Dynamic Weighted Feature Fusion (DWFF) 模塊作用 雙級特征融合 模塊結構 模塊思想 我們提出了 DWFF 策略&am…

OpenCV實現圖像特征提取與匹配

?一、特征檢測與描述子提取? ?選擇特征檢測器? 常用算法包括&#xff1a; ?ORB?&#xff1a;一種高效的替代SIFT和SURF的算法&#xff0c;主要用于移動機器人和增強現實等領域。適合實時應用&#xff0c;結合FAST關鍵點與BRIEF描述子?。?SIFT&#xff08;尺度不變特征變…

向量檢索在AI中的應用與技術解析

關鍵要點 向量檢索在AI中用于信息檢索、推薦系統和圖像搜索&#xff0c;研究表明其通過高維空間中的向量表示數據來提升搜索相關性。它依賴于嵌入技術&#xff08;如Word2Vec、BERT&#xff09;和近鄰算法&#xff08;如kNN、ANN&#xff09;&#xff0c;證據傾向于其在處理大…

事務與異步方法(@Async)協同工作

目錄 1. 問題場景與風險 &#xff08;1&#xff09;典型場景 &#xff08;2&#xff09;風險分析 2. 解決方案&#xff1a;事務提交后觸發異步操作 &#xff08;1&#xff09;代碼示例 &#xff08;2&#xff09;關鍵注解 3. 原理解析 &#xff08;1&#xff09;事務同…

關于進程的實驗(子進程和父進程相關的)

文章目錄 1.第一個問題2.第二個問題3.第三個問題 1.第一個問題 編寫一段程序&#xff0c;利用系統調用fork( )創建兩個進程。當此程序運行時&#xff0c;在系統中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符&#xff1a;父進程顯示字符“a”;子進程分別顯…

MyBatis 如何創建 SqlSession 對象的?

MyBatis 創建 SqlSession 對象的過程主要由 SqlSessionFactory 接口及其實現類來完成。以下是詳細步驟&#xff1a; 1. SqlSessionFactory 接口: SqlSessionFactory 是 MyBatis 的核心接口之一&#xff0c;它負責創建 SqlSession 對象。 你可以將 SqlSessionFactory 視為 Sql…

深度優先搜索(DFS)剪枝技術詳解與C++實現

深度優先搜索&#xff08;DFS&#xff09;剪枝技術通過提前終止無效路徑的搜索&#xff0c;大幅提升算法效率。以下是五種核心剪枝技術的詳細解析及C代碼示例&#xff1a; 目錄 一、可行性剪枝 C實現示例 二、搜索順序剪枝 偽代碼邏輯 三、最優性剪枝 C實現示例 四、排除…

【雙指針】移動零

題目描述&#xff1a; 算法分析&#xff1a; 觀察輸入輸出&#xff1a; 輸出中一共分為兩個區域&#xff0c;0區和非零區。 但是在處理未完成之前&#xff0c;必然存在著一個零和非零數共存的區域&#xff0c;所以在處理的過程當中一共有三個區域&#xff0c;0區&#xff0c;…

學習15天:pytest

1、.pytest強大的插件 pytest-html(生成html格式的自動化測試報告) pytest-xdist測試用例分布式執行。多CPU分發。 pytest-ordering 用于改變測試用例的執行順序 pytest-rerunfailures用例失敗后重跑 allure-pytest 用于生成美觀的測試報告。 2、規則&#xff1a; 模塊…

股票交易所官方api接口有哪些?獲取和使用需要滿足什么條件

炒股自動化&#xff1a;申請官方API接口&#xff0c;散戶也可以 python炒股自動化&#xff08;0&#xff09;&#xff0c;申請券商API接口 python炒股自動化&#xff08;1&#xff09;&#xff0c;量化交易接口區別 Python炒股自動化&#xff08;2&#xff09;&#xff1a;獲取…

2.7 滑動窗口專題:串聯所有單詞的子串

LeetCode 30. 串聯所有單詞的子串算法對比分析 1. 題目鏈接 LeetCode 30. 串聯所有單詞的子串 2. 題目描述 給定一個字符串 s 和一個字符串數組 words&#xff0c;words 中所有單詞長度相同。要求找到 s 中所有起始索引&#xff0c;使得從該位置開始的連續子串包含 words 中所…