在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

測試聊并發(fā)-入門篇

京東云 ? 來源:京東保險 張新磊 ? 作者:京東保險 張新磊 ? 2024-10-15 15:23 ? 次閱讀

作者:京東保險 張新磊

背景

在現(xiàn)代軟件測試的廣闊領(lǐng)域中,我們的工作不僅限于確保功能符合產(chǎn)品和業(yè)務(wù)需求的嚴(yán)格標(biāo)準(zhǔn)。隨著用戶對應(yīng)用性能的期望水漲船高,性能測試已成為衡量軟件質(zhì)量的關(guān)鍵指標(biāo)。特別是在服務(wù)端接口的性能測試中,我們面臨的挑戰(zhàn)不僅僅是處理單個請求的效率,更在于如何在多用戶同時訪問時保持系統(tǒng)的穩(wěn)定性和響應(yīng)速度。并發(fā)編程和測試,作為性能測試的核心,對于評估系統(tǒng)在高負(fù)載情況下的表現(xiàn)、識別潛在的性能瓶頸、以及優(yōu)化資源配置具有至關(guān)重要的作用。

并發(fā)編程是一門藝術(shù),它要求開發(fā)者在多線程或多進(jìn)程的環(huán)境中精心編排代碼,以實現(xiàn)資源的高效共享和任務(wù)的并行執(zhí)行。這不僅需要深厚的編程功底,更需要對并發(fā)模型、同步機制和線程安全性有深刻的認(rèn)識。而在測試領(lǐng)域,性能測試工程師必須精通如何構(gòu)建并發(fā)測試場景,運用工具模擬真實的高并發(fā)環(huán)境,以及如何從測試結(jié)果中提煉出有價值的洞察,以指導(dǎo)性能的持續(xù)優(yōu)化。

本文將深入剖析并發(fā)編程的深層原理、面臨的挑戰(zhàn)以及采納的最佳實踐。同時,我們將探討并發(fā)測試的策略、工具和技術(shù),并通過實際案例的分析,闡釋如何在軟件開發(fā)生命周期中有效地整合并發(fā)測試,以及如何利用并發(fā)測試來顯著提升系統(tǒng)的性能和可靠性。

wKgaomcOGIaAYRRFAA8I_5ZNG3k231.jpg

多線程基礎(chǔ)和作用

進(jìn)程與線程的區(qū)別

wKgZomcOGIeAZcRUAAW-odY7m30058.jpg


資源分配:進(jìn)程是資源分配的基本單位,線程是CPU調(diào)度和執(zhí)行的基本單位。
獨立性:進(jìn)程是獨立運行的,而線程則依賴于進(jìn)程。
內(nèi)存分配:進(jìn)程有自己的內(nèi)存空間,線程共享進(jìn)程的內(nèi)存空間。
開銷:線程的創(chuàng)建和切換開銷小于進(jìn)程。
并發(fā)性:線程可以提高程序的并發(fā)性,因為它們可以并行執(zhí)行。

Java中線程的創(chuàng)建方式

方式一.繼承Thread
當(dāng)你創(chuàng)建一個繼承自Thread類的子類時,你需要重寫run方法,該方法包含了線程要執(zhí)行的代碼。然后,你可以通過創(chuàng)建這個子類的實例并調(diào)用其start方法來啟動線程。

class MyThread extends Thread {
    @Override
    public void run() {
        // 線程要執(zhí)行的代碼
        System.out.println("線程運行中...");
    }
}

public class ThreadExample {
    public static void main(String[] args) {
        MyThread t = new MyThread();
        t.start(); // 啟動線程
    }
}

方式二.實現(xiàn)Runnable接口
另一種創(chuàng)建線程的方式是實現(xiàn)Runnable接口。你需要創(chuàng)建一個實現(xiàn)了Runnable接口的類,然后創(chuàng)建該類的實例,并把這個實例傳遞給Thread類的構(gòu)造函數(shù)。最后,通過調(diào)用Thread對象的start方法來啟動線程。

class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 線程要執(zhí)行的代碼
        System.out.println("線程運行中...");
    }
}

public class RunnableExample {
    public static void main(String[] args) {
        MyRunnable r = new MyRunnable();
        Thread t = new Thread(r);
        t.start(); // 啟動線程
    }
}

比較兩種方式
靈活性:實現(xiàn)Runnable接口比繼承Thread類更靈活,因為Java不支持多重繼承,但可以實現(xiàn)多個接口。
資源管理:如果你需要多個線程共享同一個資源,實現(xiàn)Runnable接口是更好的選擇,因為你可以定義一個資源類,然后創(chuàng)建多個Runnable實例來共享這個資源。
代碼重用:實現(xiàn)Runnable接口允許你將線程的運行代碼與線程的控制代碼分離,這有助于代碼重用。
在實際開發(fā)中,推薦使用實現(xiàn)Runnable接口的方式來創(chuàng)建線程,因為它提供了更好的靈活性和代碼重用性,但也需考慮實際情況選擇使用。

線程生命周期

wKgaomcOGImAVYsTAAWkaVSPzxw031.jpg

新建(New)、可運行(Runnable)、阻塞(Blocked)、正在運行(Running)、終止(Terminated)等狀態(tài)的解釋。
新建(New):
線程對象已經(jīng)被創(chuàng)建,但還沒有調(diào)用start()方法。在這個狀態(tài)下,線程還沒有開始執(zhí)行。
可運行(Runnable):
線程已經(jīng)調(diào)用了start()方法,此時線程處于可運行狀態(tài)。可運行狀態(tài)包括了操作系統(tǒng)線程的就緒(Ready)和運行(Running)狀態(tài)。線程可能正在運行,也可能正在等待CPU時間片,因為可運行狀態(tài)的線程會與其他線程共享CPU資源。
阻塞(Blocked):
線程因為等待一個監(jiān)視器鎖(比如進(jìn)入一個同步塊)而無法繼續(xù)執(zhí)行的狀態(tài)。在這種情況下,線程會一直等待直到獲取到鎖。阻塞狀態(tài)通常發(fā)生在多個線程嘗試進(jìn)入一個同步方法或同步塊時,但只有一個線程能夠獲得鎖。
正在運行(Running):
線程正在執(zhí)行其run()方法的代碼。這個狀態(tài)是可運行狀態(tài)的一個子集,表示線程當(dāng)前正在CPU上執(zhí)行。
注意:在Java官方文檔中,并沒有明確區(qū)分“可運行”和“正在運行”這兩個狀態(tài),通常將它們統(tǒng)稱為“可運行(Runnable)”狀態(tài)。
終止(Terminated):
線程的運行結(jié)束。這可能是因為線程正常執(zhí)行完任務(wù),或者因為某個未捕獲的異常導(dǎo)致線程結(jié)束。一旦線程進(jìn)入終止?fàn)顟B(tài),它就不能再被啟動或恢復(fù)。

線程同步

同步指的是在多線程環(huán)境中,控制多個線程對共享資源的訪問順序,以防止數(shù)據(jù)不一致和競態(tài)條件。同步機制確保了當(dāng)一個線程訪問某個資源時,其他線程不能同時訪問該資源。
數(shù)據(jù)一致性:防止多個線程同時修改同一數(shù)據(jù),導(dǎo)致數(shù)據(jù)不一致。
線程安全:確保程序在多線程環(huán)境下能夠正確運行,不會因為線程的并行執(zhí)行而出現(xiàn)錯誤。
性能優(yōu)化:合理的同步可以提高程序的并發(fā)性能,避免不必要的線程阻塞和上下文切換。
synchronized關(guān)鍵字的使用
synchronized 是 Java 中用于同步的一個關(guān)鍵字,它可以用于方法或代碼塊,確保同一時間只有一個線程可以執(zhí)行該段代碼。

同步方法
public synchronized void myMethod() {
    // 需要同步的代碼
}
同步代碼塊
public void myMethod() {
    synchronized(this) {
        // 需要同步的代碼
    }
}

Locks&ReentrantLock
Java 提供了更靈活的鎖機制,稱為 Locks,其中最常用的是 ReentrantLock。
Locks:提供了比 synchronized 更靈活的鎖定機制,如嘗試鎖定、定時鎖定、可中斷的鎖定等。
ReentrantLock:是一種可重入的互斥鎖,支持完全的鎖定操作,可以被同一個線程多次獲得,但必須釋放相同次數(shù)。
使用 ReentrantLock 的基本步驟:
創(chuàng)建 ReentrantLock 對象。
在需要同步的代碼塊前后調(diào)用 lock() 和 unlock() 方法。
確保在 finally 塊中釋放鎖,以避免死鎖

import java.util.concurrent.locks.ReentrantLock;
public class Example {
    private final ReentrantLock lock = new ReentrantLock();
    public void myMethod() {
        lock.lock();
        try {
            // 需要同步的代碼
        } finally {
            lock.unlock();
        }
    }
}

線程同步是確保多線程程序正確性和性能的關(guān)鍵技術(shù)。synchronized 和 ReentrantLock 提供了不同的同步機制,開發(fā)者可以根據(jù)具體需求選擇合適的同步方式。正確使用同步機制可以避免數(shù)據(jù)不一致和競態(tài)條件,提高程序的穩(wěn)定性和性能。

線程間通信

線程間通信是多線程編程中的一個重要概念,它允許線程之間進(jìn)行數(shù)據(jù)交換和狀態(tài)同步。在 Java 中,線程間通信主要通過等待/通知機制和條件變量來實現(xiàn)。

等待/通知機制(wait()、notify()、notifyAll())

wait():當(dāng)一個線程調(diào)用 wait() 方法時,它會釋放對象的鎖,并進(jìn)入該對象的等待池(wait set)中等待。其他線程可以調(diào)用 notify() 或 notifyAll() 方法來喚醒等待池中的線程。
notify():喚醒在該對象上等待的單個線程。選擇哪個線程是不確定的。
notifyAll():喚醒在該對象上等待的所有線程。

public class Message {
    private String content;
    private boolean empty = true;

    public synchronized String take() throws InterruptedException {
        while (empty) {
            wait();
        }
        empty = true;
        notifyAll();
        return content;
    }

    public synchronized void put(String content) throws InterruptedException {
        while (!empty) {
            wait();
        }
        empty = false;
        this.content = content;
        notifyAll();
    }
}

條件變量(Condition)

條件變量提供了一種更靈活的線程間通信方式。Condition 接口是 java.util.concurrent.locks 包的一部分,它與 Lock 接口一起使用。
await():類似于 wait(),但需要在 Condition 對象上調(diào)用。
signal():類似于 notify(),但需要在 Condition 對象上調(diào)用。
signalAll():類似于 notifyAll(),但需要在 Condition 對象上調(diào)用。

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class Message {
    private String content;
    private boolean empty = true;
    private final ReentrantLock lock = new ReentrantLock();
    private final Condition notEmpty = lock.newCondition();

    public void put(String content) throws InterruptedException {
        lock.lock();
        try {
            while (!empty) {
                notEmpty.await();
            }
            empty = false;
            this.content = content;
            notEmpty.signal();
        } finally {
            lock.unlock();
        }
    }

    public String take() throws InterruptedException {
        lock.lock();
        try {
            while (empty) {
                notEmpty.await();
            }
            empty = true;
            String result = content;
            notEmpty.signal();
            return result;
        } finally {
            lock.unlock();
        }
    }
}

線程池


線程池是一種執(zhí)行器(Executor),用于在一個后臺線程中執(zhí)行任務(wù)。線程池的主要目的是減少在創(chuàng)建和銷毀線程時所產(chǎn)生的性能開銷。通過重用已經(jīng)創(chuàng)建的線程來執(zhí)行新的任務(wù),線程池提高了程序的響應(yīng)速度,并且提供了更好的系統(tǒng)資源管理。

Executor框架的使用

Java的java.util.concurrent包提供了Executor框架,它是一個用于管理線程的框架,包括線程池的管理。Executor框架的核心接口是Executor和ExecutorService。
Executor:一個執(zhí)行提交的Runnable任務(wù)的接口。
ExecutorService:Executor的子接口,提供了管理任務(wù)生命周期的方法,如關(guān)閉線程池、提交異步任務(wù)等。

如何創(chuàng)建和使用不同類型的線程池

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolExample {
    public static void main(String[] args) {
        // 創(chuàng)建一個固定大小的線程池
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(4);

        // 創(chuàng)建一個緩存線程池
        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

        // 創(chuàng)建一個單線程池
        ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

        // 提交任務(wù)給線程池
        for (int i = 0; i < 10; i++) {
            final int index = i;
            fixedThreadPool.submit(() -?> {
                System.out.println("執(zhí)行任務(wù):" + index + " 線程:" + Thread.currentThread().getName());
            });
        }

        // 關(guān)閉線程池
        fixedThreadPool.shutdown();
        cachedThreadPool.shutdown();
        singleThreadExecutor.shutdown();
    }
}

并發(fā)集合

傳統(tǒng)的集合類在多線程環(huán)境下的問題

傳統(tǒng)的集合類(如 ArrayList、LinkedList、HashMap 等)并不是線程安全的。這意味著,如果在多線程環(huán)境下,多個線程同時對這些集合進(jìn)行讀寫操作,可能會導(dǎo)致以下幾種問題
數(shù)據(jù)不一致:當(dāng)多個線程同時修改集合時,可能會導(dǎo)致集合的狀態(tài)不一致。例如,一個線程正在遍歷列表,而另一個線程正在添加或刪除元素,這可能導(dǎo)致遍歷過程中出現(xiàn) ConcurrentModificationException。
競態(tài)條件:當(dāng)多個線程并發(fā)訪問集合并且至少有一個線程在修改集合時,就會發(fā)生競態(tài)條件。這意味著最終結(jié)果依賴于線程執(zhí)行的順序,這可能導(dǎo)致不可預(yù)測的結(jié)果。
臟讀:一個線程可能讀取到另一個線程修改了一半的數(shù)據(jù),這種讀取被稱為“臟讀”。
幻讀:在一個事務(wù)中,多次查詢數(shù)據(jù)庫,由于其他事務(wù)插入了行,導(dǎo)致原本滿足條件的查詢結(jié)果集中出現(xiàn)了“幻影”行。
不可重復(fù)讀:在一個事務(wù)內(nèi),多次讀取同一數(shù)據(jù)集合,由于其他線程的修改,導(dǎo)致每次都得到不同的數(shù)據(jù),這被稱為不可重復(fù)讀。

通過以下幾種策略解決多線程環(huán)境問題

使用同步包裝器:Java提供了一些同步包裝器,如 Collections.synchronizedList、Collections.synchronizedMap 等,可以將非線程安全的集合包裝成線程安全的。
使用并發(fā)集合:Java的 java.util.concurrent 包提供了一些線程安全的集合類,如 ConcurrentHashMap、CopyOnWriteArrayList 等,它們內(nèi)部實現(xiàn)了必要的同步機制。
使用鎖:可以使用 synchronized 關(guān)鍵字或 ReentrantLock 對集合的操作進(jìn)行顯式同步。
使用原子類:對于基本數(shù)據(jù)類型的集合,可以使用 java.util.concurrent.atomic 包中的原子類,如 AtomicInteger、AtomicReference 等。
使用不可變集合:不可變集合一旦創(chuàng)建就不能被修改,因此是線程安全的。可以使用 Collections.unmodifiableList、Collections.unmodifiableMap 等方法創(chuàng)建不可變集合。
使用線程局部變量:如果每個線程都需要有自己的集合副本,可以使用 ThreadLocal 類。
避免共享:如果可能,避免在多個線程間共享集合,每個線程使用獨立的集合可以避免同步問題。

并發(fā)設(shè)計模式

生產(chǎn)者-消費者模式(Producer-Consumer Pattern)

生產(chǎn)者-消費者模式是一種常見的并發(fā)設(shè)計模式,用于協(xié)調(diào)生產(chǎn)者線程和消費者線程之間的工作。生產(chǎn)者線程負(fù)責(zé)生成數(shù)據(jù),消費者線程負(fù)責(zé)處理數(shù)據(jù)。它們之間通常通過一個共享的緩沖區(qū)(如隊列)進(jìn)行通信。這個模式可以有效地解耦生產(chǎn)者和消費者的工作,提高程序的并發(fā)性能。

BlockingQueue queue = new LinkedBlockingQueue();

class Producer extends Thread {
    public void run() {
        while (true) {
            Work item = produce();
            queue.put(item);
        }
    }

    Work produce() {
        // 生產(chǎn)數(shù)據(jù)
        return new Work();
    }
}

class Consumer extends Thread {
    public void run() {
        while (true) {
            Work item = queue.take();
            consume(item);
        }
    }

    void consume(Work item) {
        // 消費數(shù)據(jù)
    }
}

讀寫鎖模式(Reader-Writer Lock Pattern)

讀寫鎖模式允許多個線程同時讀取共享資源,但寫入操作是互斥的。這種模式適用于讀多寫少的場景,可以提高程序的并發(fā)性能。

class ReadWriteResource {
    private final ReadWriteLock lock = new ReentrantReadWriteLock();

    public void read() {
        lock.readLock().lock();
        try {
            // 執(zhí)行讀取操作
        } finally {
            lock.readLock().unlock();
        }
    }

    public void write() {
        lock.writeLock().lock();
        try {
            // 執(zhí)行寫入操作
        } finally {
            lock.writeLock().unlock();
        }
    }
}

線程池模式(ThreadPool Pattern)

線程池模式通過復(fù)用一組線程來執(zhí)行多個任務(wù),減少了線程創(chuàng)建和銷毀的開銷。線程池可以控制并發(fā)線程的數(shù)量,提高資源利用率。

ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> {
    // 執(zhí)行任務(wù)
});

executor.shutdown();

案例分析

寫了幾個多線程并發(fā)的小demo,有需要可以聯(lián)系獲取倉庫權(quán)限

注:文章有很多瑕疵,歡迎各位大佬批評指正

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 測試
    +關(guān)注

    關(guān)注

    8

    文章

    5633

    瀏覽量

    128345
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4889

    瀏覽量

    70280
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    每周推薦!電子工程師自學(xué)資料及各種電路解析

    —— 提高 本文共3冊,由于資料內(nèi)存過大,分開上傳,有需要的朋友可以去主頁搜索下載哦~電子工程師自學(xué)速成分為:入門篇、提高和設(shè)計,本文為提高
    發(fā)表于 05-19 18:20

    電子工程師自學(xué)速成 —— 提高

    本文共3冊,由于資料內(nèi)存過大,分開上傳,有需要的朋友可以去主頁搜索下載哦~ 電子工程師自學(xué)速成分為:入門篇、提高和設(shè)計,本文為提高;內(nèi)容包括模擬電路和數(shù)字電路兩大部分,其中模擬
    發(fā)表于 05-15 15:56

    電子工程師自學(xué)速成——入門篇

    本文共3冊,由于資料內(nèi)存過大,分開上傳,有需要的朋友可以去主頁搜索下載哦~ 電子工程師自學(xué)速成分為:入門篇、提高和設(shè)計,本文為入門篇,內(nèi)容包括電子技術(shù)
    發(fā)表于 05-15 15:50

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗】+ 入門篇學(xué)習(xí)

    的是基礎(chǔ),主要從為什么要學(xué)習(xí)AI Agent和開發(fā)AI Agent的知識儲備入手進(jìn)行介紹。作為入門AI Agent的小白還是很有必要學(xué)習(xí)的。這里將一些重要觀點作個歸納 1.AI Agent=大模型+記憶
    發(fā)表于 05-02 09:26

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗】+初品Agent

    期待中的《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子做智能體》終于寄到了,該書由葉濤、 管鍇、張心雨完成,并由電子工業(yè)出版社出版發(fā)行。 全書分為三個部分,即入門篇、工具及實踐。由此可見這是
    發(fā)表于 04-22 11:51

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗】總體預(yù)覽及入門篇

    基礎(chǔ)知識有所補充,另外書本后面的案例也會對Ai的應(yīng)用產(chǎn)生一些啟發(fā). 首先老規(guī)矩,先看一下目錄結(jié)構(gòu) 包含3大主題: 入門篇:介紹了Agent的概念、發(fā)展、與Prompt和Copilot的區(qū)別
    發(fā)表于 04-20 21:53

    典型電路原理、電路識圖從入門到精通等資料

    1、電路識圖從入門到精通高清電子資料 由淺入深地介紹了電路圖的基礎(chǔ)知識、典型單元電路的識圖方法,通過“入門篇”和“精通篇”循序漸進(jìn)、由淺入深地介紹了電路圖的基礎(chǔ)知識、典型單元電路的識圖方法,以及典型
    的頭像 發(fā)表于 04-15 15:53 ?4441次閱讀
    典型電路原理、電路識圖從<b class='flag-5'>入門</b>到精通等資料

    新概念51單片機C語言教程入門、提高、開發(fā)、拓展全攻略

    資料介紹 從實際應(yīng)用入手,以實驗過程和實驗現(xiàn)象為主導(dǎo),循序漸進(jìn)地講述51單片機C語言編程方法以及51單片機的硬件結(jié)構(gòu)和功能應(yīng)用。全書共分5,分別為入門篇、內(nèi)外部資源操作、提高、實
    發(fā)表于 04-15 13:57

    電路識圖從入門到精通高清電子資料

    由淺入深地介紹了電路圖的基礎(chǔ)知識、典型單元電路的識圖方法,通過“入門篇”和“精通篇”循序漸進(jìn)、由淺入深地介紹了電路圖的基礎(chǔ)知識、典型單元電路的識圖方法,以及典型小家電、電動車、洗衣機、電冰箱、空調(diào)器
    發(fā)表于 04-10 16:22

    RK3568驅(qū)動指南|第三-并發(fā)與競爭-第19章 并發(fā)與競爭實驗

    RK3568驅(qū)動指南|第三-并發(fā)與競爭-第19章 并發(fā)與競爭實驗
    的頭像 發(fā)表于 02-24 16:26 ?490次閱讀
    RK3568驅(qū)動指南|第三<b class='flag-5'>篇</b>-<b class='flag-5'>并發(fā)</b>與競爭-第19章 <b class='flag-5'>并發(fā)</b>與競爭實驗

    為什么自動駕駛的越來越多,無人駕駛的越來越少?

    “無人駕駛”與“自動駕駛”,傻傻分不清楚?就在之前的一文章中,引用了王傳福的一句話,其說的是無人駕駛是“扯淡”( 相關(guān)閱讀: 無人駕駛是“扯淡”?是皇帝的新裝?),隨后也有小伙伴問,無人駕駛
    的頭像 發(fā)表于 02-23 10:52 ?443次閱讀
    為什么<b class='flag-5'>聊</b>自動駕駛的越來越多,<b class='flag-5'>聊</b>無人駕駛的越來越少?

    超詳細(xì)“零”基礎(chǔ)kafka入門篇

    1、認(rèn)識kafka 1.1 kafka簡介 Kafka?是一個分布式流媒體平臺 kafka官網(wǎng):http://kafka.apache.org/ (1)流媒體平臺有三個關(guān)鍵功能: 發(fā)布和訂閱記錄流 ,類似于消息隊列或企業(yè)消息傳遞系統(tǒng)。 以 容錯的持久方式存儲記錄流 。 記錄發(fā)生時處理流。 (2)Kafka通常用于兩大類應(yīng)用: 構(gòu)建可在 系統(tǒng)或應(yīng)用程序之間 可靠獲取數(shù)據(jù)的實時流數(shù)據(jù)管道 構(gòu)建轉(zhuǎn)換或響應(yīng)數(shù)據(jù)流的實時流應(yīng)用程序 要了解Kafka如何做這些事情,讓我們深入探討Kafka的能力。 (3)首先是幾個概念:
    的頭像 發(fā)表于 12-18 09:50 ?2588次閱讀
    超詳細(xì)“零”基礎(chǔ)kafka<b class='flag-5'>入門篇</b>

    零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——工程文件架構(gòu)

    -Eyes-S1【入門篇】——初識小安派-Eyes-S12、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——安裝VMware與Ubuntu3、入門篇:零基礎(chǔ)開發(fā)小安派-Eyes-S1——新建工程并燒錄調(diào)試4
    的頭像 發(fā)表于 11-06 16:10 ?488次閱讀
    零基礎(chǔ)開發(fā)小安派-Eyes-S1【<b class='flag-5'>入門篇</b>】——工程文件架構(gòu)

    重塑定位邊界:革新 UWB 信標(biāo)定位系統(tǒng)測試套件,精準(zhǔn)并發(fā)融合引領(lǐng)未來

    面對日益復(fù)雜多變的應(yīng)用場景及高并發(fā)需求的激增,巍泰技術(shù)特隆重推出采用 TurMass 無線通信技術(shù)的 UWB 信標(biāo)定位系統(tǒng)測試套件 WTS-102 ,為各類復(fù)雜應(yīng)用場景提供持續(xù)、可靠、精準(zhǔn)的定位服務(wù)。
    的頭像 發(fā)表于 09-23 15:13 ?1077次閱讀
    重塑定位邊界:革新 UWB 信標(biāo)定位系統(tǒng)<b class='flag-5'>測試</b>套件,精準(zhǔn)<b class='flag-5'>并發(fā)</b>融合引領(lǐng)未來

    【《大語言模型應(yīng)用指南》閱讀體驗】+ 俯瞰全書

    松。 入門篇主要偏應(yīng)用,比如大語言模型的三種交互方式,分析了提示工程、工作記憶和長短期記憶,此最后講了ChatGPT的接口和擴展功能應(yīng)用,適合大語言模型應(yīng)用技術(shù)人員閱讀。 進(jìn)階就非常專業(yè)了,適合專業(yè)
    發(fā)表于 07-21 13:35
    主站蜘蛛池模板: 国产精品1区2区3区在线播放 | 亚洲 另类色区 欧美日韩 | 恐怖片大全恐怖片免费观看好看的恐怖片 | 天天爱天天干天天 | 狠狠操人人 | 影音先锋五月天 | 激情文学亚洲色图 | 你懂得在线网址 | 精品精品国产自在久久高清 | 国产精品久久久久影院色老大 | 欧美性一区二区三区五区 | 手机看片国产免费永久 | 色多多福利网站 | 欧美性精品 | 亚洲性夜| 日本骚视频 | 色欲香天天天综合网站 | 91三级在线观看 | 亚洲综合成人网 | 四虎影视永久地址 | 日本午夜大片a在线观看 | 久久www免费人成高清 | 成人免费国产gav视频在线 | 成人做视频免费 | 最近2018免费中文字幕视频 | 青楼社区51在线视频视频 | 一级骚片超级骚在线观看 | 午夜网站视频 | 色综合久久久高清综合久久久 | 一本大道高清在线视频 视频 | 午夜在线观看免费 | 国产精品看片 | 综合丁香 | 国产成人v爽在线免播放观看 | 国产深夜福利在线观看网站 | 日韩三级小视频 | 天天干天天色综合网 | 一区二区三区视频观看 | 日韩三级在线免费观看 | 在线视频观看免费 | 天天干夜夜拍 |