Kotlin協程Semaphore withPermit約束并發任務數量

Kotlin協程Semaphore withPermit約束并發任務數量

?

?

import kotlinx.coroutines.*
import kotlinx.coroutines.sync.Semaphore
import kotlinx.coroutines.sync.withPermit
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlockingfun main() {val permits = 1 //注意觀察1,2,3時候并發跑出來的任務狀況val semaphore = Semaphore(permits)runBlocking {launch {myfun("a", semaphore)}launch {myfun("b", semaphore)}launch {myfun("c", semaphore)}println("啟動完畢")delay(5000)}
}private suspend fun myfun(tag: String? = null, semaphore: Semaphore) {val start = System.currentTimeMillis()println("$tag start @$start")semaphore.withPermit {withTimeout(5000) {runInterruptible {runBlocking {delay(1000)}}}}val end = System.currentTimeMillis()println("$tag end 耗時=${end - start} @$end")
}

1、當?permits = 1

啟動完畢
a start @1744097960395
b start @1744097960406
c start @1744097960411
a end 耗時=1026 @1744097961421
b end 耗時=2023 @1744097962429
c end 耗時=3019 @1744097963430

?

?

?

2、當?permits = 2

啟動完畢
a start @1744097988824
b start @1744097988833
c start @1744097988834
b end 耗時=1016 @1744097989849
a end 耗時=1025 @1744097989849
c end 耗時=2024 @1744097990858

?

?

3、當?permits = 3

啟動完畢
a start @1744098013438
b start @1744098013450
c start @1744098013450
c end 耗時=1007 @1744098014457
b end 耗時=1007 @1744098014457
a end 耗時=1019 @1744098014457

?

簡單的說,Semaphore的permits約束了同時并發的協程任務數量。當并發任務數量超過permits后,多出來的任務就要等待permits數量內的任務完成后、空出余量才能投入運行。

?

?

Kotlin協程runBlocking并發launch,Semaphore同步1個launch任務運行_kotlin launch僅運行一次-CSDN博客文章瀏覽閱讀1.1k次。本文介紹了如何使用Kotlin的協程和Semaphore進行并發控制,確保在并發環境中A、B、C三個任務按照順序運行,即使引入Java版Semaphore也會有不同表現。 https://blog.csdn.net/zhangphil/article/details/132356885

新Java線程Semaphore:并行環境下訪問競爭資源控制_并發進程競爭資源如何進行控制-CSDN博客文章瀏覽閱讀585次。本文介紹Java 1.5引入的Semaphore類,用于多線程環境下資源訪問控制。通過實例展示如何設置許可證數量,控制線程并發訪問,確保資源訪問的同步與互斥。 https://blog.csdn.net/zhangphil/article/details/83410270

?

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

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

相關文章

鴻蒙語言基礎

準備工作 去鴻蒙官網下載開發環境 點擊右側預瀏覽,刷新和插銷按鈕,插銷表示熱更新,常用按鈕。 基礎語法 string number boolean const常量 數組 let s : string "1111"; console.log("string", s);let n : number …

C++數據結構與二叉樹詳解

前言: 在C編程的世界里,數據結構是構建高效程序的基石,而二叉樹則是其中最優雅且應用廣泛的數據結構之一。本文將帶你深入理解二叉樹的本質、實現與應用,助你在算法設計中游刃有余。 一、二叉樹的基本概念 1. 什么是二叉樹 二叉樹…

淺析數據庫面試問題

以下是關于數據庫的一些常見面試問題: 一、基礎問題 什么是數據庫? 數據庫是按照數據結構來組織、存儲和管理數據的倉庫。SQL 和 NoSQL 的區別是什么? SQL 是關系型數據庫,使用表結構存儲數據;NoSQL 是非關系型數據庫,支持多種數據模型(如文檔型、鍵值對型等)。什么是…

piamon實戰-- 如何使用 Paimon 的 Java API 實現數據的點查

簡介 Apache Paimon(原 Flink Table Store)是一款基于流批一體架構的 ??高性能數據湖存儲框架??,支持低延遲的數據更新、實時查詢和高效的鍵值點查(Point Lookup)。 本文將深入解析 Paimon 的點查機制,并通過 Java API 代碼案例演示如何實現數據的點查功能。 一、Pai…

社交媒體時代的隱私憂慮:聚焦Facebook

在數字化時代,社交媒體平臺已成為人們日常生活的重要組成部分。Facebook作為全球最大的社交媒體之一,擁有數十億用戶,其對個人隱私的影響和憂慮也日益凸顯。本文將探討社交媒體時代下,尤其是Facebook平臺上的隱私問題。 數據收集…

問題:el-tree點擊某節點的復選框由半選狀態更改為全選狀態以后,點擊該節點展開,懶加載出來子節點數據以后,該節點又變為半選狀態

具體問題場景: 用戶點擊父節點復選框將其從半選變為全選(此時子節點尚未加載)。 點擊節點展開觸發懶加載,加載子節點。 子節點加載后,組件重新計算父節點狀態,發現并非所有子節點被選中,因此父節…

FastGPT安裝前,系統環境準備工作?

1.啟用適用于 Linux 的 Windows 子系統 方法一:打開控制面板 -> 程序 -> 啟用或關閉Windows功能->勾選 “適用于Linux的Vindows子系統” 方法二:以管理員身份打開 PowerShell(“開始”菜單 >“PowerShell” >單擊右鍵 >“…

網頁端調用本地應用打開本地文件(PDF、Word、excel、PPT)

一、背景原因 根據瀏覽器的安全策略,在網頁端無法直接打開本地文件,所以需要開發者曲線救國。 二、實現步驟 前期準備: 確保已安裝好可以打開文件的應用軟件,如,WPS; 把要打開的文件統一放在一個文件夾&am…

EnlightenGAN:低照度圖像增強

簡介 簡介:記錄如何使用EnlightenGAN來做低照度圖像增強。該論文主要是提供了一個高效無監督的生成對抗網絡,通過全球局部歧視器結構,一種自我調節的感知損失融合,以及注意機制來得到無需匹配的圖像增強效果。 論文題目:EnlightenGAN: Deep Light Enhancement Without P…

010數論——算法備賽

數論 模運算 一般求余都是對正整數的操作&#xff0c;如果對負數&#xff0c;不同編程語言結果可能不同。 C/javapythona>m,0<a%m<m-1 a<m,a%ma~5%32~-5%3 -21(-5)%(-3) -2~5%(-3)2-1正數&#xff1a;&#xff08;ab&#xff09;%m((a%m)(b%m))%m~正數&#xff…

初識Redis · C++客戶端string

目錄 前言&#xff1a; string的API使用 set get&#xff1a; expire: NX XX: mset,mget&#xff1a; getrange setrange: incr decr 前言&#xff1a; 在前文&#xff0c;我們已經學習了Redis的定制化客戶端怎么來的&#xff0c;以及如何配置好Redis定制化客戶端&…

GoogleCodeUtil.java

Google動態驗證碼實現 GoogleCodeUtil.java package zwf;import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.security.SecureRandom;/** https://mvnrepository.com/artifact/commons-codec/…

【Leetcode 每日一題】2176. 統計數組中相等且可以被整除的數對

問題背景 給你一個下標從 0 0 0 開始長度為 n n n 的整數數組 n u m s nums nums 和一個整數 k k k&#xff0c;請你返回滿足 0 ≤ i < j < n 0 \le i < j < n 0≤i<j<n&#xff0c; n u m s [ i ] n u m s [ j ] nums[i] nums[j] nums[i]nums[j] 且…

如何校驗一個字符串是否是可以正確序列化的JSON字符串呢?

方法1&#xff1a;先給一個比較暴力的方法 try {JSONObject o new JSONObject(yourString); } catch (JSONException e) {LOGGER.error("No valid json"); } 方法2&#xff1a; Object json new cn.hutool.json.JSONTokener("[{\"name\":\"t…

【路由交換方向IE認證】BGP選路原則之AS-Path屬性

文章目錄 一、路由器BGP路由的處理過程控制平面和轉發平面選路工具 二、BGP的選路順序選路的前提選路順序 三、AS-Path屬性選路原則AS-Path屬性特性AS-Path管進還是管出呢&#xff1f;使用AS-Path對進本AS的路由進行選路驗證AS-Path不接收帶本AS號的路由 四、BGP鄰居建立配置 一…

2025年熱門項目管理軟件對比:20款工具詳解

本文主要盤點的工具有&#xff1a;1. PingCode; 2. Worktile; 3. Jira; 4. Trello; 5. TAPD; 6. Monday.com; 7. 進度貓; 8. 豬齒魚; 9. 簡道云; 10. Tita項目管理等等20款項目管理軟件&#xff08;含免費&#xff09;。 在如今競爭激烈的商業環境中&#xff0c;項目管理軟件已…

yaffs_write_new_chunk()函數解析

yaffs_write_new_chunk() 是 YAFFS&#xff08;Yet Another Flash File System&#xff09;文件系統中用于將數據寫入新物理塊&#xff08;chunk&#xff09;的關鍵函數。以下是其詳細解析&#xff1a; 函數原型 int yaffs_write_new_chunk(struct yaffs_dev *dev, const u8 *…

網絡安全-Burp Suite基礎篇

聲明 本文主要用做技術分享&#xff0c;所有內容僅供參考。任何使用或者依賴于本文信息所造成的法律后果均與本人無關。請讀者自行判斷風險&#xff0c;并遵循相關法律法規。 1 Burp Suite功能介紹 1.1 Burp Suite 簡介 Burp Suite 是一款極為強大且廣受歡迎的集成化 …

網絡編程 - 2

目錄 UDP 數據報套接字編程 API 介紹 DatagramSocket DatagramPacket 補充&#xff1a; 代碼示例 - 回顯服務器 服務器端&#xff1a; 客戶端&#xff1a; 補充&#xff1a; 代碼演示 梳理代碼&#xff1a; 下面是一個大概的流程圖~ 文字解釋&#xff1a; 圖文并…

【C++深入系列】:模版詳解(上)

&#x1f525; 本文專欄&#xff1a;c &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 你不需要很厲害才能開始&#xff0c;但你需要開始才能很厲害。 ★★★ 本文前置知識&#xff1a; 類和對象&#xff08;上&#xff09; …