当前位置: 首页 > wzjs >正文

宁波公司网站建立营销型网站建设的要素

宁波公司网站建立,营销型网站建设的要素,wordpress前端切换风格,wordpress数据库删不掉文章目录 一、问题背景二、代码实现 一、问题背景 经常做 Android 应用的小伙伴应该会有经验,就是如果应用在写入文件的时候,即使写文件的动作是在子线程,也会出现 UI 上的卡顿,这是因为文件的 IO 是由内核去完成的,此…

文章目录

  • 一、问题背景
  • 二、代码实现

一、问题背景

经常做 Android 应用的小伙伴应该会有经验,就是如果应用在写入文件的时候,即使写文件的动作是在子线程,也会出现 UI 上的卡顿,这是因为文件的 IO 是由内核去完成的,此时 CPU 会从 用户态 切换到 内核态,应用将无法获得 CPU 时间片。如果 IO 较少的时候,这个切换不频繁,应用能有足够的时间片去执行绘制。但如果 IO 频繁,例如高速写入的场景下,此时 IO 占用的时间片增加,而我们知道 CPU 资源是有限的,此时会导致应用获得 时间片 将减少,导致 UI 绘制线程出现卡顿,进而影响 UI 上的卡顿。

我们可以使用 top 命令,查看 IO 占用 CPU 的时间片(即 iow):
在这里插入图片描述

因此,如果不能从其它方式去解决此问题(内核层的 IO 调度 和 CPU 调度机制),可以运用简单的方式:在写入文件的时候,限制写入速度,减缓 IO 占用率。

二、代码实现

例如,一个标准的拷贝文件的 Kotlin 方法如下:

originFile.inputStream().buffered().use { inputStream ->targetFile.outputStream().buffered().use { outputStream ->val buffer = ByteArray(1024)var bytesRead: Intwhile (inputStream.read(buffer).also { bytesRead = it } != -1) {outputStream.write(buffer, 0, bytesRead)}outputStream.flush()}
}

这个方法对 源文件 开启了 InputStream,并转换为 BufferInputStream,而对 目标文件 开启了 OutputStream,并转换为 BufferOutputStream,然后再从 InputStream 读取流,输出到 OutputStream,完成文件的读写。

而我们为了实现限制其写入速度,我们可以定义一个速率,例如每秒写入 20M,即每秒写入的字节数为 20 * 1024 * 1024 = 20, 971, 520 。在每次写入量达到 20M 的时候,检查一次写入这 20M 使用的时长,如果这个时长 < 1s ,则表示在这 1s 的时间里,写入的速率已经超过了 20M,需要等待一定时长,使其满足 1s 内只写入 20M 的需求。代码如下:

// 限制拷贝时的速率, 每秒最多拷贝的字节数
val MAX_COPY_SPEED = 20 * 1024 * 1024L// 记录已拷贝的文件大小
var copiedSize = 0L// 记录上次检查性能的时间 (用来计算拷贝速率 限制拷贝速率)
var lastCheckPerformanceTime = System.currentTimeMillis()
// 记录上次检查时 已拷贝的数据量
var lastCheckPerformanceSize = 0LoriginFile.inputStream().buffered(1024 * 1024).use { inputStream ->targetFile.outputStream().buffered().use { outputStream ->val buffer = ByteArray(DEFAULT_BUFFER_SIZE)var bytesRead: Intwhile (inputStream.read(buffer).also { bytesRead = it } != -1) {outputStream.write(buffer, 0, bytesRead)// 增加已拷贝文件的大小copiedSize += bytesRead// 计算拷贝速率 每满 MAX_COPY_SPEED 计算一次速率if (copiedSize - lastCheckPerformanceSize >= MAX_COPY_SPEED) {lastCheckPerformanceSize = copiedSizeval time = System.currentTimeMillis()// 计算写入 MAX_COPY_SPEED 字节数所使用的时间val deltaTime = time - lastCheckPerformanceTimelastCheckPerformanceTime = time// 如果速率大于 MAX_COPY_SPEED 则暂停 等待下次计算if (deltaTime < 1000) {// 延迟 1000 - deltaTime 使满足 1s 内只写入指定量delay(1000 - deltaTime)}}}outputStream.flush()}
}
http://www.dtcms.com/wzjs/552304.html

相关文章:

  • 宿迁网站设计yii2框架做的网站有哪些
  • 网站建设找美橙互联网络规划与设计毕业设计
  • 做册子模板素材有哪些网站设计制作公司
  • 微商城模板包含哪些谷歌seo优化技巧
  • 网站设计公司简介开源crm系统排名
  • 特级a做爰网站深圳前十网站扩广公司
  • 用外服务器做网站做网络推广的团队
  • 重庆城市管理学院网站网站开发包含哪些
  • 学校网站建设源码帝国cms搭建个人网站
  • 丹阳建设局官方网站wordpress跟换域名图片不显示
  • pc网站的优势淄博网站制作价格低
  • 医院网站建设规划书seo建站系统
  • 长春建站的费用辽阳网站开发
  • 中文网站常用字体搜索引擎收录提交
  • 做视频网站需要什么空间吗沈阳网站建设 熊掌号
  • 企企业业网网站站建建设设下载企业微信最新版
  • 江苏省建设工程备案网站自己做网站建设
  • 商业网站建立专门做兼职的网站
  • 网站数据库模版揭阳网站建设策划方案
  • 外贸网站在哪做外链私人推流服务器
  • 如皋网站开发广东省广建设计集团有限公司
  • 在线推广企业网站的方法有成都网站建设博客
  • 做家居用品亚马逊看哪些网站网站建设需求模板下载
  • 现在做一个网站大概多少钱郑州做网站推广外包
  • 比较好的网站建设企业网站怎么实现两种语言
  • 网站前台设计工具seo计费系统
  • 邯郸做网站的公司哪家好商业设计网站推荐
  • 电影网站怎么做推广wordpress虚拟主机无法发邮件
  • 电商网站建设工具wordpress分类文章
  • 常州网络公司网站加强学校网站建设的要求