ElasticJob怎么使用?

我們使用ElasticJob需要以下步驟: 1. 添加依賴 2. 配置任務(可以使用Spring命名空間配置或Java配置) 3. 實現任務邏輯(實現SimpleJob、DataflowJob等接口) 4. 啟動任務 下面是一個詳細的示例,包括Spring Boot集成ElasticJob的步驟。 注意:ElasticJob有兩個版本:ElasticJob-Lite和ElasticJob-Cloud。我們這里使用ElasticJob-Lite(輕量級無中心化解決方案)。 步驟1:添加Maven依賴 在pom.xml中添加以下依賴:```xml<dependency> <groupId>org.apache.shardingsphere.elasticjob</groupId> <artifactId>elasticjob-lite-spring-boot-starter</artifactId> <version>3.0.1</version> <!-- 請使用最新版本 --></dependency>``` 步驟2:配置ElasticJob(這里使用Spring Boot的application.properties配置) 在application.properties中配置注冊中心(Zookeeper)和任務參數:```properties# 注冊中心配置elasticjob.reg-center.server-lists=localhost:2181elasticjob.reg-center.namespace=elasticjob-demo# 任務配置(這里配置一個簡單任務)elasticjob.jobs.mySimpleJob.elastic-job-class=com.example.demo.job.MySimpleJobelasticjob.jobs.mySimpleJob.cron=0/5 * * * * ?elasticjob.jobs.mySimpleJob.sharding-total-count=3elasticjob.jobs.mySimpleJob.overwrite=true``` 步驟3:編寫任務類(實現SimpleJob接口)```javapackage com.example.demo.job;import org.apache.shardingsphere.elasticjob.api.ShardingContext;import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;public class MySimpleJob implements SimpleJob { @Override public void execute(ShardingContext shardingContext) { // 根據分片項執行任務 System.out.println("分片項: " + shardingContext.getShardingItem() + ", 總分片數: " + shardingContext.getShardingTotalCount() + ", 任務參數: " + shardingContext.getJobParameter()); // 實際業務邏輯 switch (shardingContext.getShardingItem()) { case 0: // 處理第一片數據 break; case 1: // 處理第二片數據 break; case 2: // 處理第三片數據 break; } }}``` 步驟4:啟動Spring Boot應用 如果需要使用Java配置方式(代替properties配置),可以創建一個配置類:```javaimport org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap;import org.apache.shardingsphere.elasticjob.reg.zookeeper.ZookeeperRegistryCenter;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class ElasticJobConfig { @Autowired private ZookeeperRegistryCenter regCenter; @Bean(initMethod = "schedule") public ScheduleJobBootstrap mySimpleJob(MySimpleJob mySimpleJob) { return new ScheduleJobBootstrap(regCenter, mySimpleJob, JobConfiguration.newBuilder("mySimpleJob", 3) // 任務名稱和分片總數 .cron("0/5 * * * * ?") // cron表達式 .jobParameter("參數") // 任務參數 .overwrite(true) // 是否覆蓋配置 .build()); }}``` 注意:如果使用Java配置,需要同時配置Zookeeper注冊中心:```java@Beanpublic ZookeeperRegistryCenter regCenter() { // 配置Zookeeper ZookeeperConfiguration zkConfig = new ZookeeperConfiguration("localhost:2181", "elasticjob-demo"); return new ZookeeperRegistryCenter(zkConfig);}``` 步驟5:分片策略 ElasticJob可以將任務拆分成多個分片,每個分片由不同的服務器執行。你可以在任務中根據分片項處理不同的數據。 例如,處理數據庫數據時,可以這樣分片:```java@Overridepublic void execute(ShardingContext shardingContext) { // 獲取分片項和總分片數 int shardingItem = shardingContext.getShardingItem(); int shardingTotalCount = shardingContext.getShardingTotalCount(); // 根據分片項查詢數據(例如:按ID取模) List<Long> data = getDataFromDatabase(); for (Long id : data) { if (id % shardingTotalCount == shardingItem) { // 處理這個數據 process(id); } }}``` 步驟6:監聽器(可選) 你可以添加任務監聽器來監控任務執行情況:```javapublic class MyJobListener implements ElasticJobListener { @Override public void beforeJobExecuted(ShardingContexts shardingContexts) { System.out.println("任務開始"); } @Override public void afterJobExecuted(ShardingContexts shardingContexts) { System.out.println("任務結束"); }}``` 然后在任務配置中添加監聽器:```java@Bean(initMethod = "schedule")public ScheduleJobBootstrap mySimpleJob(MySimpleJob mySimpleJob) { return new ScheduleJobBootstrap(regCenter, mySimpleJob, JobConfiguration.newBuilder("mySimpleJob", 3) .cron("0/5 * * * * ?") .jobListenerTypes("myJobListener") // 監聽器名稱(需要將監聽器注冊為Bean) .overwrite(true) .build());}// 注冊監聽器Bean@Beanpublic MyJobListener myJobListener() { return new MyJobListener();}``` 步驟7:錯誤處理 任務執行過程中出現異常,ElasticJob會進行重試(可配置)并記錄錯誤日志。你也可以在任務中自己捕獲異常處理。 總結: 使用ElasticJob的關鍵步驟: 1. 引入依賴 2. 配置注冊中心(Zookeeper) 3. 定義任務(實現SimpleJob等接口) 4. 配置任務(cron表達式、分片數等) 5. 啟動任務(通過Spring Boot自動啟動或手動調度) 更多詳細配置請參考官方文檔:https://shardingsphere.apache.org/elasticjob/current/cn/overview/

ElasticJob 使用詳解

ElasticJob 是一個分布式調度解決方案,提供分布式任務調度、彈性擴容縮容、作業分片等功能。下面我將詳細介紹如何在 Spring Boot 中使用 ElasticJob。

環境準備

1. 添加 Maven 依賴

xml

<dependencies><!-- ElasticJob 核心依賴 --><dependency><groupId>org.apache.shardingsphere.elasticjob</groupId><artifactId>elasticjob-lite-spring-boot-starter</artifactId><version>3.0.1</version> <!-- 使用最新版本 --></dependency><!-- Zookeeper 注冊中心 --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>5.2.0</version></dependency>
</dependencies>

2. 配置文件 (application.yml)

yaml

elasticjob:reg-center:server-lists: localhost:2181  # Zookeeper 地址namespace: elasticjob-demo    # 命名空間

基礎使用

1. 創建簡單任務

java

import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;
import org.springframework.stereotype.Component;@Component
public class MySimpleJob implements SimpleJob {@Overridepublic void execute(ShardingContext context) {// 獲取分片信息int shardingItem = context.getShardingItem();int totalShards = context.getShardingTotalCount();System.out.printf("執行分片任務: %d/%d, 參數: %s%n", shardingItem, totalShards,context.getJobParameter());// 業務邏輯處理switch (shardingItem) {case 0: processShard0();break;case 1:processShard1();break;// ... 其他分片}}private void processShard0() {// 處理分片0的任務}private void processShard1() {// 處理分片1的任務}
}

2. 配置任務

java

import org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap;
import org.apache.shardingsphere.elasticjob.reg.zookeeper.ZookeeperRegistryCenter;
import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ElasticJobConfig {@Autowiredprivate ZookeeperRegistryCenter regCenter;@Autowiredprivate MySimpleJob mySimpleJob;@Bean(initMethod = "schedule")public ScheduleJobBootstrap scheduleMySimpleJob() {return new ScheduleJobBootstrap(regCenter, mySimpleJob, createJobConfiguration());}private JobConfiguration createJobConfiguration() {// 創建作業配置return JobConfiguration.newBuilder("mySimpleJob", 3) // 作業名稱,分片總數.cron("0/5 * * * * ?")   // 每5秒執行一次.shardingItemParameters("0=A,1=B,2=C") // 分片參數.jobParameter("globalParam") // 作業自定義參數.overwrite(true)            // 本地配置是否覆蓋注冊中心配置.build();}
}

核心功能詳解

1. 分片機制

ElasticJob 的核心功能是將任務拆分成多個分片,由不同節點并行處理:

java

public void execute(ShardingContext context) {// 獲取當前分片項int shardingItem = context.getShardingItem();// 獲取所有待處理數據IDList<Long> allIds = fetchAllDataIds();// 根據分片規則處理數據for (Long id : allIds) {if (id % context.getShardingTotalCount() == shardingItem) {processData(id);}}
}

2. 彈性擴容

當增加或減少服務實例時,ElasticJob 會自動重新分配分片:

text

初始狀態(2節點):
節點1:分片0,1
節點2:分片2擴容后(3節點):
節點1:分片0
節點2:分片1
節點3:分片2

3. 任務類型

3.1 簡單任務 (SimpleJob)

java

public class MySimpleJob implements SimpleJob {@Overridepublic void execute(ShardingContext context) {// 實現業務邏輯}
}
3.2 數據流任務 (DataflowJob)

java

public class MyDataflowJob implements DataflowJob<Order> {@Overridepublic List<Order> fetchData(ShardingContext context) {// 獲取待處理數據return fetchUnprocessedOrders(context);}@Overridepublic void processData(ShardingContext context, List<Order> data) {// 處理數據processOrders(data);}
}
3.3 腳本任務 (ScriptJob)

yaml

elasticjob:jobs:myScriptJob:job-type: SCRIPTprops:script.command-line: "echo Hello ElasticJob"

4. 事件追蹤

java

@Bean
public ScheduleJobBootstrap scheduleJob() {return new ScheduleJobBootstrap(regCenter,myJob,JobConfiguration.newBuilder("myJob", 3).cron("0/5 * * * * ?").eventTraceRdbDataSource("dataSource") // 配置數據源.build());
}

5. 故障轉移

java

JobConfiguration.newBuilder("myJob", 3).cron("0/5 * * * * ?").failover(true) // 開啟故障轉移.build()

高級配置

1. 作業監聽器

java

public class MyJobListener implements ElasticJobListener {@Overridepublic void beforeJobExecuted(ShardingContexts contexts) {System.out.println("作業開始執行: " + contexts.getJobName());}@Overridepublic void afterJobExecuted(ShardingContexts contexts) {System.out.println("作業執行完成: " + contexts.getJobName());}
}// 注冊監聽器
@Bean
public ElasticJobListener myJobListener() {return new MyJobListener();
}// 配置到任務
JobConfiguration.newBuilder("myJob", 3).jobListenerTypes("myJobListener") // 監聽器Bean名稱.build()

2. 作業錯誤處理策略

java

JobConfiguration.newBuilder("myJob", 3).jobErrorHandlerType("LOG") // 錯誤處理策略.build()

支持策略:

  • LOG:記錄日志不中斷作業

  • THROW:拋出異常中斷作業

  • IGNORE:忽略異常

  • EMAIL:發送郵件(需自定義)

3. 自定義錯誤處理器

java

public class MyErrorHandler implements JobErrorHandler {@Overridepublic void handleException(String jobName, Throwable cause) {// 自定義錯誤處理邏輯sendAlert(jobName, cause);}
}// 注冊為Bean
@Bean
public JobErrorHandler myErrorHandler() {return new MyErrorHandler();
}// 配置到任務
JobConfiguration.newBuilder("myJob", 3).jobErrorHandlerType("myErrorHandler").build()

Spring Boot 自動配置

1. 使用?@ElasticJobScheduler?注解

java

@ElasticJobScheduler(name = "myAutoJob", cron = "0/10 * * * * ?",shardingTotalCount = 3,jobParameters = "autoParam",overwrite = true
)
public class MyAutoJob implements SimpleJob {@Overridepublic void execute(ShardingContext context) {System.out.println("自動配置任務執行");}
}

2. 配置文件配置

yaml

elasticjob:jobs:myConfigJob:elastic-job-class: com.example.MySimpleJobcron: 0/5 * * * * ?sharding-total-count: 3sharding-item-parameters: 0=A,1=B,2=Cjob-parameters: configParamoverwrite: truejob-error-handler-type: LOG

運維管理

1. 控制臺安裝

  1. 下載?ElasticJob-Lite-UI

  2. 啟動:

    bash

    tar -zxvf apache-shardingsphere-elasticjob-${version}-lite-ui-bin.tar.gz
    cd apache-shardingsphere-elasticjob-${version}-lite-ui-bin
    bin/start.sh

2. 常用 REST API

  • 查看作業狀態:GET /api/jobs/{jobName}/status

  • 觸發作業執行:POST /api/jobs/{jobName}/trigger

  • 禁用作業:POST /api/jobs/{jobName}/disable

  • 啟用作業:POST /api/jobs/{jobName}/enable

最佳實踐

1. 分片策略設計

java

public void execute(ShardingContext context) {// 1. 獲取所有分片數據List<Long> allIds = getAllDataIds();// 2. 計算分片處理的數據范圍List<Long> shardIds = allIds.stream().filter(id -> id % context.getShardingTotalCount() == context.getShardingItem()).collect(Collectors.toList());// 3. 處理分片數據processShardData(shardIds);
}

2. 數據庫分片示例

java

@Autowired
private OrderRepository orderRepository;public void execute(ShardingContext context) {// 根據分片查詢數據Pageable pageable = PageRequest.of(0, 100);int mod = context.getShardingTotalCount();int remainder = context.getShardingItem();List<Order> orders = orderRepository.findByStatusAndShard("PENDING",mod,remainder,pageable);// 處理訂單processOrders(orders);
}// Repository 接口
@Query("SELECT o FROM Order o WHERE o.status = :status " + "AND MOD(o.id, :mod) = :remainder")
List<Order> findByStatusAndShard(@Param("status") String status,@Param("mod") int mod,@Param("remainder") int remainder,Pageable pageable);

3. 冪等性設計

java

public void processOrder(Order order) {// 1. 檢查是否已處理if (order.isProcessed()) {return;}// 2. 加分布式鎖try (Lock lock = lockService.acquireLock("order_" + order.getId())) {// 3. 再次檢查(雙重檢查)if (orderRepository.isProcessed(order.getId())) {return;}// 4. 處理業務process(order);// 5. 更新狀態order.markAsProcessed();orderRepository.save(order);}
}

常見問題解決

1. Zookeeper 連接問題

yaml

# 增加連接超時配置
elasticjob:reg-center:server-lists: localhost:2181namespace: elasticjob-demobase-sleep-time-milliseconds: 1000max-sleep-time-milliseconds: 3000max-retries: 3

2. 任務不執行檢查

  1. 確認 Zookeeper 是否正常運行

  2. 檢查作業配置是否同步到注冊中心

  3. 查看節點日志是否有異常

  4. 確認作業是否被禁用

3. 分片不均問題

使用自定義分片策略:

java

public class CustomShardingStrategy implements JobShardingStrategy {@Overridepublic Map<String, List<Integer>> sharding(List<String> servers, String jobName, int shardingTotalCount) {// 自定義分片邏輯Map<String, List<Integer>> result = new LinkedHashMap<>();for (int i = 0; i < servers.size(); i++) {result.put(servers.get(i), new ArrayList<>());}for (int i = 0; i < shardingTotalCount; i++) {int index = i % servers.size();result.get(servers.get(index)).add(i);}return result;}
}// 配置使用
JobConfiguration.newBuilder("myJob", 3).jobShardingStrategyType("com.example.CustomShardingStrategy").build()

總結

ElasticJob 使用核心步驟:

  1. 添加依賴:引入 ElasticJob 和 Zookeeper 依賴

  2. 配置注冊中心:在配置文件中設置 Zookeeper 地址

  3. 實現任務:根據需求選擇 SimpleJob/DataflowJob/ScriptJob

  4. 配置任務:通過 Java Config 或注解配置任務參數

  5. 分片設計:合理設計分片策略處理分布式數據

  6. 運維管理:使用控制臺或 API 管理任務

關鍵優勢:

  • 分布式調度:支持任務在集群中分片執行

  • 彈性擴容:自動感知節點變化并重新分片

  • 故障轉移:自動轉移失敗任務分片

  • 作業治理:提供豐富的運維管理功能

生產環境建議:

  1. 為 Zookeeper 配置集群(至少3節點)

  2. 重要任務配置事件追蹤和監控報警

  3. 定期檢查控制臺的任務執行情況

  4. 設計任務時考慮冪等性和事務一致性

通過合理使用 ElasticJob,可以構建高可靠、可擴展的分布式任務調度系統,有效解決傳統定時任務在分布式環境中的各種問題。

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

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

相關文章

TCP協議的特點和首部格式

文章目錄TCP協議是什么&#xff1f;TCP協議的主要特點1. 面向連接2. 可靠傳輸3. 流量控制4. 擁塞控制TCP首部格式源端口和目標端口&#xff08;各16位&#xff09;序列號&#xff08;32位&#xff09;確認號&#xff08;32位&#xff09;數據偏移&#xff08;4位&#xff09;保…

IO流-文件的常用方法

1.關于java.io.File類- File類只能表示計算機中的文件或目錄而不能獲取或操作文件- 通過File類獲得到文件的基本信息&#xff0c;如文件名、大小等&#xff0c;但不能獲取文件內容- java中表示文件路徑分隔符使用"/"或"\\"- File類中的構造方法- File(&quo…

AUTOSAR進階圖解==>AUTOSAR_SRS_E2E

AUTOSAR E2E通信保護解析 AUTOSAR End-to-End通信保護機制詳解與應用目錄 概述 1.1. AUTOSAR E2E通信保護的作用 1.2. E2E通信保護的應用場景AUTOSAR E2E架構 2.1. E2E組件層次結構 2.2. E2E庫和E2E轉換器E2E監控狀態機 3.1. 狀態定義與轉換 3.2. 狀態機實現E2E保護數據交換流…

鏡像快速部署ollama+python+ai

算力租賃入口&#xff1a;https://www.jygpu.com為大家提供以上鏡像快速部署方式&#xff0c;節約大家環境部署時間一鍵部署的便捷性傳統自建GPU服務器需要經歷復雜的硬件采購、驅動安裝、環境配置等繁瑣步驟&#xff0c;而現代??GPU租賃價格對比??顯示&#xff0c;容器化平…

使用Gemini API開發領域智能聊天機器人的思路

以下是使用 Gemini API 開發軟件自動化測試專家領域專屬智能聊天機器人的詳細思路及具體實現過程&#xff1a; 階段一&#xff1a;基礎準備與規劃 (Foundation & Planning) 這個階段的目標是明確方向、準備好所有必要的工具和憑證。 步驟 1&#xff1a;明確聊天機器人的目…

第13屆藍橋杯Python青少組_省賽_中/高級組_2022年4月17日真題

更多內容請查看網站&#xff1a;【試卷中心 -----> 藍橋杯----> Python----> 省賽】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 第13屆藍橋杯Python青少組_省賽_中/高級組_2022年4月17日真題 一、選擇題 第 1 題 下列二進制數中最大的是&#xff08; &a…

sqli-labs:Less-17關卡詳細解析

1. 思路&#x1f680; 本關的SQL語句為&#xff1a; $sql"SELECT username, password FROM users WHERE username $uname LIMIT 0,1"; $update"UPDATE users SET password $passwd WHERE username$row1";注入類型&#xff1a;字符串型&#xff08;單引號…

文心一言:推動 AIGC 領域進步

文心一言:推動AIGC領域進步 關鍵詞:文心一言、AIGC、自然語言處理、多模態生成、大模型、技術架構、應用場景 摘要:本文深入剖析百度文心一言在AIGC(人工智能生成內容)領域的技術創新與實踐成果。通過解析其核心技術架構、多模態生成原理、工程化落地策略及行業應用案例,…

第15講——微分方程

文章目錄思維導圖基本概念微分方程及其階思維導圖 基本概念 微分方程及其階

RAGFlow Agent 知識檢索節點源碼解析:從粗排到精排的完整流程

RAGFlow Agent 知識檢索節點深度解析&#xff1a;從查詢到重排序的完整流程 1. 總體架構概覽 RAGFlow Agent 中的知識檢索&#xff08;Retrieval&#xff09;節點是整個RAG系統的核心組件&#xff0c;負責從知識庫中找到與用戶查詢最相關的文檔片段。檢索流程可以分為以下幾個…

Python算法實戰:從排序到B+樹全解析

Python中常見的算法示例 以下是Python中常見的算法示例,涵蓋基礎算法和經典問題解決方案,代碼可直接運行: 排序算法 冒泡排序 def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr…

【C++算法】85.BFS解決最短路徑問題_最小基因變化

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 433. 最小基因變化 題目描述&#xff1a; 解法 先看懂題目 先把這個問題轉化&#xff1a;圖論問題 邊權為1的最短路問題。 為什么可以這么想&#xff1f;&#xff01; 因為每…

基于單片機汽車少兒安全預警系統

文章目錄一、前言1.1 項目介紹【1】項目開發背景【2】設計實現的功能【3】項目硬件模塊組成【4】設計意義【5】市面上同類產品研究現狀【6】摘要1.2 設計思路1.3 系統功能總結1.4 開發工具的選擇【1】設備端開發【2】上位機開發1.5 模塊的技術詳情介紹1.6 框架圖框架圖說明&…

Mac 上配置jdk 環境變量

核心步驟是設置 JAVA_HOME 變量&#xff0c;并將其 bin 目錄添加到系統的 PATH 變量中。 macOS 從 Catalina (10.15) 版本開始&#xff0c;默認的終端 Shell 從 bash 切換到了 zsh。因此&#xff0c;你需要先確定你正在使用的 Shell&#xff0c;然后編輯對應的配置文件。步驟一…

硬件-音頻學習DAY1——音箱材料選擇:密度板為何完勝實木

每日更新教程&#xff0c;評論區答疑解惑&#xff0c;小白也能變大神&#xff01;" 目錄 一.音箱材料選擇的關鍵因素 二.密度板的聲學優勢 三.材料穩定性的對比 四.生產工藝的適應性 五.成本與環保的平衡 六.特殊場景的例外情況 七.消費者選購指南 八.行業發展趨勢…

微波(Microwave)與毫米波(Millimeter wave)簡介

一、電磁波頻段劃分&#xff0c;微波與毫米波所屬 二、微波 可以看出UHF及以上的頻段都可以統稱為微波。記得之前上微波技術實驗課的時候會接觸比巴掌還大的金屬波導&#xff0c;后來每次看到微波技術的時候都還是感到陌生。今天突然想到&#xff0c;不像在手機里就能完成的5G頻…

ObjectMapper教程

ObjectMapper 簡介ObjectMapper 是 Jackson 庫的核心類&#xff0c;用于 Java 對象與 JSON 數據之間的相互轉換。它支持序列化&#xff08;對象轉 JSON&#xff09;和反序列化&#xff08;JSON 轉對象&#xff09;&#xff0c;廣泛應用于 REST API、數據存儲和配置處理等場景。…

【Node.js安裝注意事項】-安裝路徑不能有空格

問題描述&#xff1a;在項目中使用 nodemon時&#xff0c;出現了nodemon 啟動問題&#xff1a;nodemon : 無法將“nodemon”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。解決辦法&#xff1a;在網上找了很多教程&#xff0c;試了很多辦法&#xff0c;什么重新配置環境…

Shader開發(六)什么是著色器

在前面的章節中&#xff0c;我們簡要提到了著色器的概念&#xff0c;現在有了渲染管線的基礎知識&#xff0c;我們可以更深入地理解著色器的真正含義。著色器&#xff08;Shader&#xff09;是運行在圖形處理單元&#xff08;GPU&#xff09;上的專用程序&#xff0c;這與我們日…

操作系統-lecture4(進程的調度)

進程的切換 接下來需要了解兩個問題 誰觸發了進程切換進程切換的動作 中斷技術 中斷源 中斷處理過程&#xff08;陷阱機制&#xff09; 特權指令和非特權指令 Privileged Instructions&#xff1a;特權指令 ?The Instructions that can run only in Kernel Mode are called…