2023/12/25

Daemon Thread in java

Java 的 thread 有分為 User 與 Daemon Thread 兩種。

User Thread 的執行優先順序比較高,JVM會等所有的 User Thread 都結束工作後,才會完全地停止工作。

Daemon Thead 的 priority 比較低,通常是用來提供 service 給 user thread 使用。如果有資料 IO 的工作,不建議在 daemon thead 裡面實作。因為JVM 不需要等待 daemon thread,所以可以隨時中止 daemon thread,通常在 daemon thread 會用無窮迴圈實作,如果有 finally 部分的程式,在 daemon thread 並不會保證一定會被執行。

Daemon thead 可用在 garbage collection,釋放記憶體,釋放 cache 的工作。

Daemon thead 要在產生物件後,start 前,用 setDaemon 設定為 daemon thread

NewThread daemonThread = new NewThread();
daemonThread.setDaemon(true);
daemonThread.start();

// 用 isDaemon() 檢查是否為 Daemon Thread
daemonThread.isDaemon();

References

Daemon Threads in Java | Baeldung

JAVA并发编程——守护线程(Daemon Thread) - Luochengor - 博客园

2023/12/18

Fluent API

fluent API 是一種 OO API design 方式,可讓 API 的使用者,透過 chain method 的方式持續呼叫該物件的 method。在實作這種 API 介面時,method 必須要在最後回傳物件本身的 reference,以最常見的 set methods 來說,以往都是回傳 void,但要改為回傳 this。

在實作支援 Fluent API 這樣的類別時,要注意物件的 immutability 特性,如果該類別是修改物件內部資料的狀態,那麼就直接回傳 this 就好了,但也有可能是持續產生相同類別的新物件。

Difference Between Fluent Interface and Builder Pattern in Java | Baeldung 這個網頁提出了兩種不同的例子

以下是 User 的 Builder,可透過 set method 不斷地修改使用者的各個欄位資料,一直到最後,確認要產生 User 時,就呼叫 build

public static class Builder {
    private String firstName;
    private String lastName;
    private String email;
    private String username;
    private Long id;

    public Builder firstName(String firstName) {
        this.firstName = firstName;
        return this;
    }

    public Builder lastName(String lastName) {
        this.lastName = lastName;
        return this;
    }

    // other methods

    public User build() {
         return new User(firstName, lastName, email, username, id);
    }
}

在使用時

Builder userBuilder = new Builder();
User user = userBuilder
            .firstName("John")
            .lastName("Will")
            .build();

另一個要持續產生新的物件的例子是 Html,因為 html 裡面的 String content 是不能直接修改的,故必須要在 method 最後面都產生一個新的物件

public class HtmlDocument {
    private final String content;

    public HtmlDocument() {
        this("");
    }

    public HtmlDocument(String html) {
        this.content = html;
    }

    public String html() {
        return format("<html>%s</html>", content);
    }

    public HtmlDocument header(String header) {
        return new HtmlDocument(format("%s <h1>%s</h1>", content, header));
    }

    public HtmlDocument paragraph(String paragraph) {
        return new HtmlDocument(format("%s <p>%s</p>", content, paragraph));
    }
}

使用時

HtmlDocument document = new HtmlDocument()
  .header("header")
  .paragraph("paragraph 1")
  .paragraph("paragraph 2");
String html = document.html();

References

Fluent API: Practice and Theory | SIGPLAN Blog

Fluent programming style

Fluent API — 流畅API(基于Java介绍) | 桃子爱吃桃子

2023/12/04

TSN (Time-Sensitive Networking)

時效性網路(Time-sensitive Networking, TSN)是電機電子工程師協會(IEEE)定義的專用於使乙太網路更具確定性的一種網路拓展。TSN 是區域網路(LAN)解決方案,只有在TSN LAN內部才能保證其即時性。

為解決乙太網路低延遲與時間同步的問題,Industrial Ethernet 的 Protocol

  • EtherCAT
  • EtherNet/IP
  • PROFINET
  • Powerlink
  • Modbus-TCP
  • SERCOS Ⅲ

在應用上來說Industrial Ethernet是與Standard Ethernet不相容的。TSN 解決了這些問題

  1.  TSN相容於Standards Ethernet IEEE802.1規範,可以與非TSN乙太網路一起使用的區域網路,TSN支援更高頻寬的傳輸速度 (Gbit/s以上)
  2.  TSN工作在Layer 2 technology of OSI model
  3.  在Standards Ethernet的區域網路中可以做到:
     高頻寬、低延遲、保障頻寬(Priority)、時間同步等功能
  4. 透過IEEE 802.1AS (協議簡稱精確時鐘協議Precision Timing Protocol - PTP) 實現TSN裝置之間共享時間戳記 (Time Stamping) 的設備。

TSN 並未取代 Layer 2 以上層級的協定,也未定義軟體介面或硬體配置與特點,因此可相容於多種應用程式開發介面 (API)

TSN主要功能是時間同步 (Time Sync)、優先權 (Priority)、可靠性 (Reliability)、資源管理 (Resource Management)。時間同步 (Time Sync) 是透過802.1AS標準,在傳送跟接收的封包上加上時間戳記 (Time Stamping),在區域網路之中可以將設備之間的訊號同步在微秒 (us) 範圍

優先權 (Priority) 是透過802.1Qbu & 802.1Qbv標準,允許將正在傳輸的資料中斷讓優先等級較高的資料進行傳送,等優先等級較高的資料傳送完成後再回到先前被中斷的資料繼續傳輸,確保優先等級較高的資料有最大的傳輸頻寬跟最低的傳輸延遲時間。

可靠性 (Reliability) 是透過802.1CB標準,將原本要傳送的封包複製成多個不同封包,每一個不同的封包會透過不同的路徑來做傳送,最後在接收端會自動消除其它的冗餘 (Redundancy) 封包,使其接收端只會收到一筆封包資料,即使在傳輸路經之中出現了單點的故障情況 (如設備損壞或是電纜線斷開等),都可以確保目的端可以接收到正確且完整的資料。

資源管理(Resource Management) 是透過802.1Qcc標準,將TSN配置分成三種模式:

  1. 完全分散模式(Fully Distributed Model)
  2. 完全集中模式(Fully Centralized Model)
  3. 集中&分散混合模式(Centralized & Distributed Model)

一些關鍵的 IEEE 802.1 TSN 子標準包括:

  • IEEE 802.1 AS – 時序與同步
  • IEEE 802.1Qbv – 時間感知塑形器
  • IEEE 802.3Qbr – 散佈快速流量
  • IEEE 802.1Qbu – 訊框搶佔
  • IEEE 802.1Qca – 路徑控制與保留
  • IEEE 802.1CB – 備援
  • IEEE 802.1 Qcc – 串流保留的增強與改善
  • IEEE 802.1 Qch – 迴圈佇列與轉送
  • IEEE 802.1Qci – 逐一串流過濾與監管
  • IEEE 802.1CM – 前傳網路的時效性網路

TSN的應用

影音設備

電影院、音樂廳控制系統,聲音從表演者經過傳輸到聽眾接收,中間如果有延遲,是很難被接受的

汽車控制

汽車控制系統裡面有四個主流的匯流排構成 LIN、CAN、FlexRay & MOST,不同系統採用不同的匯流排且涉及到相當複雜的佈線,汽車上的設計以及感知器會日趨複雜,連接的設備也愈來愈多,TSN的技術可以區分時間敏感度以及優先層級的資料,降低延遲以及時間同步等優點,系統就能輕易且正確傳送從感測器到到影音串流各種不同類型的資料,進而提供可靠性以及可預測性的高速網路系統。

工業應用

感測器連接的節點愈多,想要每個感測器跟控制器的無縫連接就愈困難,工業自動化中,精準的時間是關鍵要素,傳統的乙太網路並無法保證網路延遲範圍,透過TSN的網路環境,在傳統乙太網路上加入了即時性的控管,對網路流量進行優先排序,提供保證延遲範圍,以便對時間較敏感的資料可以在正確的時間傳到正確的目標端。

References

一讀就懂的TSN (Time-Sensitive Networking) 應用與架構 | Macnica Galaxy

時間敏感網路(TSN)中央控制器簡介 - 科技新知 - 產業學習網

## TSN 讓工業物聯網和工業 4.0 發揮更大效用 — 您不可不知的 5 件事

TSN技術說明與Avnu認證流程 | 百佳泰 Allion Labs

# 如何實作時效性網路以確保確定性通訊

保障時遲性/高傳輸速率 時效性網路掀工業自動化革命 | 新通訊