協(xié)程 協(xié)程是輕量級線程,一個線程中可以有很多協(xié)程,協(xié)程本質(zhì)上可以認為是運行在線程上的代碼塊,協(xié)程提供的掛起操作會使協(xié)程暫停執(zhí)行,而不會導(dǎo)致線程阻塞。協(xié)程的實現(xiàn)大多都在編譯器操...
協(xié)程 協(xié)程是輕量級線程,一個線程中可以有很多協(xié)程,協(xié)程本質(zhì)上可以認為是運行在線程上的代碼塊,協(xié)程提供的掛起操作會使協(xié)程暫停執(zhí)行,而不會導(dǎo)致線程阻塞。協(xié)程的實現(xiàn)大多都在編譯器操...
2023-01-13T11:00:52.573 start:0
2023-01-13T11:00:52.574-> pool-1-thread-1開始讀取文件 0
2023-01-13T11:00:53.151-> pool-1-thread-1結(jié)束讀取文件0,文件大小為:535M,使用時間為:577
.
2023-01-13T11:00:53.151 end:0
2023-01-13T11:00:53.152 start:1
2023-01-13T11:00:53.152-> pool-1-thread-1開始讀取文件 1
2023-01-13T11:00:53.670-> pool-1-thread-1結(jié)束讀取文件1,文件大小為:535M,使用時間為:518
.
2023-01-13T11:00:53.670 end:1
2023-01-13T11:00:53.670 start:2
2023-01-13T11:00:53.670-> pool-1-thread-1開始讀取文件 2
2023-01-13T11:00:54.177-> pool-1-thread-1結(jié)束讀取文件2,文件大小為:535M,使用時間為:507
.
2023-01-13T11:00:54.177 end:2
2023-01-13T11:00:54.177 start:3
2023-01-13T11:00:54.177-> pool-1-thread-1開始讀取文件 3
2023-01-13T11:00:54.690-> pool-1-thread-1結(jié)束讀取文件3,文件大小為:535M,使用時間為:513
.
2023-01-13T11:00:54.690 end:3
2023-01-13T11:00:54.690 start:4
2023-01-13T11:00:54.690-> pool-1-thread-1開始讀取文件 4
2023-01-13T11:00:55.194-> pool-1-thread-1結(jié)束讀取文件4,文件大小為:535M,使用時間為:503
.
2023-01-13T11:00:55.194 end:4
這是打印的數(shù)據(jù)
kotlin協(xié)程的使用與原理協(xié)程 協(xié)程是輕量級線程,一個線程中可以有很多協(xié)程,協(xié)程本質(zhì)上可以認為是運行在線程上的代碼塊,協(xié)程提供的掛起操作會使協(xié)程暫停執(zhí)行,而不會導(dǎo)致線程阻塞。協(xié)程的實現(xiàn)大多都在編譯器操...
fun main(){
f()
}
fun f() = runBlocking {
//創(chuàng)建自定義線程池
val coroutineDispatcher = Executors.newFixedThreadPool(1).asCoroutineDispatcher()
repeat(5) { // 啟動大量的協(xié)程
launch(coroutineDispatcher) {
println("${LocalDateTime.now()} start:${it}")
readFile(it)
println(".")
println("${LocalDateTime.now()} end:${it}")
}
}
}
private fun readFile(i:Int): Long {
val start = System.currentTimeMillis()
println("${LocalDateTime.now()}-> ${Thread.currentThread().name}開始讀取文件 ${i}")
val path = "/Users/pjgao/IdeaProjects/data/gldrawable${i}.zip"
val file = File(path)
val readBytes = file.readBytes()
val fileSize = readBytes.size / 1024 / 1024
//val fileSize = 0
val useTime = System.currentTimeMillis() - start
println("${LocalDateTime.now()}-> ${Thread.currentThread().name}結(jié)束讀取文件${i},文件大小為:${fileSize}M,使用時間為:$useTime")
return useTime
}
這是測試代碼
kotlin協(xié)程的使用與原理協(xié)程 協(xié)程是輕量級線程,一個線程中可以有很多協(xié)程,協(xié)程本質(zhì)上可以認為是運行在線程上的代碼塊,協(xié)程提供的掛起操作會使協(xié)程暫停執(zhí)行,而不會導(dǎo)致線程阻塞。協(xié)程的實現(xiàn)大多都在編譯器操...
這邊有個 關(guān)于協(xié)程 ,對io操作的疑惑。我這邊自定義一個分發(fā)器。底層是單個固定線程的線程池。然后基于這個分發(fā)器開多個協(xié)程 去讀取文件。發(fā)現(xiàn)讀取的時間還是相當(dāng)于一個個讀的時間,并沒有并發(fā)的效果。按前面 “關(guān)于IO操作” 的說法,應(yīng)該對于多個文件是可以做到并發(fā)讀的效果?
kotlin協(xié)程的使用與原理協(xié)程 協(xié)程是輕量級線程,一個線程中可以有很多協(xié)程,協(xié)程本質(zhì)上可以認為是運行在線程上的代碼塊,協(xié)程提供的掛起操作會使協(xié)程暫停執(zhí)行,而不會導(dǎo)致線程阻塞。協(xié)程的實現(xiàn)大多都在編譯器操...
Java JVM及相關(guān)概念1、概述 JVM是Java Virtual Machine(Java虛擬機)的縮寫,是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機,是通過在實際的計算機上仿真模擬各種計算...
1、概述 OOP(Object-oriented programming),指面向?qū)ο蟪绦蛟O(shè)計。也是目前主流的程序設(shè)計思想。這邊討論下由Robert C. Martin在21...
1、概述 前面幾篇關(guān)于OpenGLES的文章: OpenGL ES 2.0 顯示圖形(上) OpenGL ES 2.0 顯示圖形(下) OpenGL ES 3.0(一)綜述 ...
國內(nèi)的手機要去應(yīng)用市場下個ARCore組件才行。
ARCore 使用Sceneform 創(chuàng)建ARApp1、概述 在前面一篇文章 ARCore相關(guān) 里已經(jīng)討論過一些關(guān)于AR 和ARCore的概念了,并基于OpenGL ES實現(xiàn)了一個ARApp 的demo。OpenGL ES是內(nèi)...
1、概述 前面幾篇關(guān)于OpenGLES的文章: OpenGL ES 2.0 顯示圖形(上) OpenGL ES 2.0 顯示圖形(下) OpenGL ES 3.0(一)綜述 ...
@lllaa 看你這提示是這個glutInit已經(jīng)在mac OS10.9 版本以后被棄用了啊。
OpenGL ES 3.0(五)坐標(biāo)系1、概述 前面幾篇關(guān)于OpenGLES的文章: OpenGL ES 2.0 顯示圖形(上) OpenGL ES 2.0 顯示圖形(下) OpenGL ES 3.0(一)綜述 ...
1、概述 前面幾篇關(guān)于OpenGLES的文章: OpenGL ES 2.0 顯示圖形(上) OpenGL ES 2.0 顯示圖形(下) OpenGL ES 3.0(一)綜述 ...
1、概述 前面幾篇關(guān)于OpenGLES的文章: OpenGL ES 2.0 顯示圖形(上) OpenGL ES 2.0 顯示圖形(下) OpenGL ES 3.0(一)綜述 ...
1、概述 前面幾篇文章OpenGL ES 3.0(一)綜述 、OpenGL ES 3.0(二)GLSL與著色器 討論到可以為每個頂點添加顏色來增加圖形的細節(jié),從而創(chuàng)建出有趣的...
1、概述 在上一篇文章OpenGL ES 3.0(一)綜述 中提到,著色器(Shader)是運行在GPU上的小程序。這些小程序為圖形渲染管線的某個特定部分而運行。從本質(zhì)上來說...
1、概述 傳統(tǒng)的流IO對于大部分的IO場景, 能適應(yīng)的比較好。但是, 由于它的阻塞性, 也就是說每一個流的讀寫都需要占用一個線程。這意味著, 流IO的可伸縮性很差。因此, 就...