240 发简信
IP属地:陕西
  • kotlin协程的使用与原理

    协程 协程是轻量级线程,一个线程中可以有很多协程,协程本质上可以认为是运行在线程上的代码块,协程提供的挂起操作会使协程暂停执行,而不会导致线程阻塞。协程的实现大多都在编译器操...

  • 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结束读取文件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结束读取文件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结束读取文件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结束读取文件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结束读取文件4,文件大小为:535M,使用时间为:503
    .
    2023-01-13T11:00:55.194 end:4

    这是打印的数据

    kotlin协程的使用与原理

    协程 协程是轻量级线程,一个线程中可以有很多协程,协程本质上可以认为是运行在线程上的代码块,协程提供的挂起操作会使协程暂停执行,而不会导致线程阻塞。协程的实现大多都在编译器操...

  • fun main(){
    f()
    }

    fun f() = runBlocking {
    //创建自定义线程池
    val coroutineDispatcher = Executors.newFixedThreadPool(1).asCoroutineDispatcher()
    repeat(5) { // 启动大量的协程
    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}结束读取文件${i},文件大小为:${fileSize}M,使用时间为:$useTime")
    return useTime
    }

    这是测试代码

    kotlin协程的使用与原理

    协程 协程是轻量级线程,一个线程中可以有很多协程,协程本质上可以认为是运行在线程上的代码块,协程提供的挂起操作会使协程暂停执行,而不会导致线程阻塞。协程的实现大多都在编译器操...

  • 这边有个 关于协程 ,对io操作的疑惑。我这边自定义一个分发器。底层是单个固定线程的线程池。然后基于这个分发器开多个协程 去读取文件。发现读取的时间还是相当于一个个读的时间,并没有并发的效果。按前面 “关于IO操作” 的说法,应该对于多个文件是可以做到并发读的效果?

    kotlin协程的使用与原理

    协程 协程是轻量级线程,一个线程中可以有很多协程,协程本质上可以认为是运行在线程上的代码块,协程提供的挂起操作会使协程暂停执行,而不会导致线程阻塞。协程的实现大多都在编译器操...

  • :smile:

    Java JVM及相关概念

    1、概述 JVM是Java Virtual Machine(Java虚拟机)的缩写,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算...

  • OOP 五大设计原则

    1、概述 OOP(Object-oriented programming),指面向对象程序设计。也是目前主流的程序设计思想。这边讨论下由Robert C. Martin在21...

  • 120
    OpenGL ES 3.0(七)颜色和光照

    1、概述 前面几篇关于OpenGLES的文章: OpenGL ES 2.0 显示图形(上) OpenGL ES 2.0 显示图形(下) OpenGL ES 3.0(一)综述 ...

  • 国内的手机要去应用市场下个ARCore组件才行。

    ARCore 使用Sceneform 创建ARApp

    1、概述 在前面一篇文章 ARCore相关 里已经讨论过一些关于AR 和ARCore的概念了,并基于OpenGL ES实现了一个ARApp 的demo。OpenGL ES是内...

  • OpenGL ES 3.0(六)摄像机

    1、概述 前面几篇关于OpenGLES的文章: OpenGL ES 2.0 显示图形(上) OpenGL ES 2.0 显示图形(下) OpenGL ES 3.0(一)综述 ...

  • @lllaa 看你这提示是这个glutInit已经在mac OS10.9 版本以后被弃用了啊。

    OpenGL ES 3.0(五)坐标系

    1、概述 前面几篇关于OpenGLES的文章: OpenGL ES 2.0 显示图形(上) OpenGL ES 2.0 显示图形(下) OpenGL ES 3.0(一)综述 ...

  • 120
    OpenGL ES 3.0(五)坐标系

    1、概述 前面几篇关于OpenGLES的文章: OpenGL ES 2.0 显示图形(上) OpenGL ES 2.0 显示图形(下) OpenGL ES 3.0(一)综述 ...

  • OpenGL ES 3.0(四)矩阵变换

    1、概述 前面几篇关于OpenGLES的文章: OpenGL ES 2.0 显示图形(上) OpenGL ES 2.0 显示图形(下) OpenGL ES 3.0(一)综述 ...

  • OpenGL ES 3.0(三)纹理

    1、概述 前面几篇文章OpenGL ES 3.0(一)综述 、OpenGL ES 3.0(二)GLSL与着色器 讨论到可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的...

  • OpenGL ES 3.0(二)GLSL与着色器

    1、概述 在上一篇文章OpenGL ES 3.0(一)综述 中提到,着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从本质上来说...

  • 120
    Java NIO相关

    1、概述 传统的流IO对于大部分的IO场景, 能适应的比较好。但是, 由于它的阻塞性, 也就是说每一个流的读写都需要占用一个线程。这意味着, 流IO的可伸缩性很差。因此, 就...