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

js怎么做网站企业网d1net

js怎么做网站,企业网d1net,个人备案的网站做企业站,旅游网站组织结构图怎么做一#xff0c;简介 Kotlin协程引入了非常强大的异步编程模型#xff0c;通过挂起而不是阻塞来实现并发操作。以下是有关Kotlin协程挂起和阻塞的详细介绍#xff1a; 挂起#xff08;Suspending#xff09;#xff1a; 挂起是指一个协程的执行可以在不阻塞线程的情况下暂…一简介 Kotlin协程引入了非常强大的异步编程模型通过挂起而不是阻塞来实现并发操作。以下是有关Kotlin协程挂起和阻塞的详细介绍 挂起Suspending 挂起是指一个协程的执行可以在不阻塞线程的情况下暂停和恢复。挂起函数是一种能够让协程挂起并释放线程的特殊函数允许其他协程在该协程挂起期间运行。协程可以在执行IO操作、等待网络请求、休眠或执行任何可能导致阻塞的操作时挂起。 阻塞 阻塞是指线程在执行某个操作时被暂停直到该操作完成而不能执行其他任务。在传统的多线程编程中通常会使用阻塞调用如Thread.sleep()或等待I/O操作完成这会导致线程被阻塞浪费了宝贵的资源。 协程的非阻塞特性 Kotlin协程通过将任务挂起到后台线程而不阻塞主线程使得在同一线程上执行多个任务变得更加高效。由于协程不需要一直占用线程所以可以运行大量协程而无需创建太多线程。 使用协程挂起函数 在Kotlin中使用suspend关键字声明挂起函数这允许函数在协程中挂起。 例如suspend fun fetchData(): String是一个可以在协程中挂起的函数它可以执行异步操作而不阻塞线程。 协程调度器 协程的执行受调度器的管理调度器负责决定何时挂起和恢复协程以及在哪个线程上运行它们。通过使用不同的调度器可以控制协程的执行方式例如在主线程、IO线程或自定义线程池中执行。 总之Kotlin协程的挂起机制允许在不阻塞线程的情况下执行异步任务这在编写高效且响应式的并发代码方面非常有用。挂起函数使协程可以在等待I/O或执行其他可能导致阻塞的操作时让出线程以提高应用程序的性能和响应性。 二示例 以下是使用Kotlin协程的示例演示了挂起和阻塞的区别 首先确保你的项目中已经引入了Kotlin协程库以便使用协程。 kotlinCopy codeimport kotlinx.coroutines.* import kotlin.system.measureTimeMillis// 一个挂起函数模拟网络请求 suspend fun fetchData(): String {delay(1000) // 模拟延迟1秒的网络请求return Data from the network }fun main() runBlocking {// 创建一个协程作用域val time measureTimeMillis {val result async { fetchData() } // 启动一个协程来执行网络请求println(Waiting for data...)println(Data received: ${result.await()})}println(Time taken: $time ms) } 上述代码中我们创建了一个挂起函数fetchData()它模拟了一个网络请求使用delay()函数来模拟1秒的延迟。在main函数中我们使用runBlocking创建了一个协程作用域以便执行协程。然后我们使用async启动一个协程来执行fetchData()函数。 现在让我们看看挂起和阻塞的区别 挂起在async中使用await()函数来获取网络请求的结果但在等待网络请求的过程中协程会挂起而不会阻塞整个线程。这意味着其他协程可以在此期间运行而不会浪费线程资源。阻塞如果我们使用传统的阻塞方式例如Thread.sleep(1000)线程将被完全阻塞无法执行其他任务。这会浪费线程资源并降低应用程序的性能。 总之使用协程的挂起机制可以实现非阻塞的并发操作提高了应用程序的性能和资源利用率。而传统的阻塞方式则会浪费线程资源导致应用程序的响应性下降。 三通过Android项目展示挂起和阻塞的区别 在Android项目中演示挂起和阻塞更容易理解 我们之到通过 runBlocking创建一个顶层协程会阻塞所在的线程例如我们在主线程使用runBlocking创建一个需要耗时操作的协程 import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.ang.rxdemo1.databinding.ActivityCoroutine2Binding import kotlinx.coroutines.*class CoroutineActivity2 : AppCompatActivity() {lateinit var binding: ActivityCoroutine2Binding;private var job: Job? nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding ActivityCoroutine2Binding.inflate(layoutInflater)setContentView(binding.root)binding.btnSubmit.setOnClickListener {runBlocking(Dispatchers.IO CoroutineName(顶层协程)) {//协程中有耗时操作需要10S才能执行完成Log.d(TAG,协程开始执行)delay(1000.times(10))Log.d(TAG,协程执行完成)}}} xml布局activity_coroutine2.xml ?xml version1.0 encodingutf-8? androidx.appcompat.widget.LinearLayoutCompat xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:gravitycenter_horizontaltools:context.xiecheng.CoroutineActivityButtonandroid:idid/btn_submitandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text执行//androidx.appcompat.widget.LinearLayoutCompat 测试连续多次点击”执行”按钮稍等片刻后就会出现ANR导致程序崩溃这就是runBlocking创建的协程阻塞主线程无法执行其他操作导致的用户无响应异常的出现 如果上面代码使用协程挂起函数执行耗时操作不会阻塞主线程的执行 binding.btnSubmit.setOnClickListener { // runBlocking(Dispatchers.IO CoroutineName(顶层协程)) {//协程中有耗时操作需要10S才能执行完成 // Log.d(TAG,协程开始执行) // delay(1000.times(10)) // Log.d(TAG,协程执行完成) // }val coroutineScope CoroutineScope(Dispatchers.Main CoroutineName(协程A))coroutineScope.launch{Log.d(TAG,协程开始执行 ${Thread.currentThread().name} ${coroutineContext[CoroutineName]?.name})delay(10000)//挂起函数挂起当前协程Log.d(TAG,协程执行完成 ${Thread.currentThread().name} ${coroutineContext[CoroutineName]?.name})}} 在多次点击不会阻塞主线所以也不会出现ANR 异常 也可以通过如下代码对比挂起和阻塞的区别 阻塞线程 binding.btnSubmit.setOnClickListener {Thread.sleep(100000)Log.d(TAG,协程执行完成 ${Thread.currentThread().name})} 挂起非阻塞线程 binding.btnSubmit.setOnClickListener {GlobalScope.launch(Dispatchers.Main CoroutineName(协程A)) {Log.d(TAG,协程开始执行 ${Thread.currentThread().name} ${coroutineContext[CoroutineName]?.name})delay(10000)//挂起函数挂起当前协程Log.d(TAG,协程执行完成 ${Thread.currentThread().name} ${coroutineContext[CoroutineName]?.name})}// Thread.sleep(100000) // Log.d(TAG,协程执行完成 ${Thread.currentThread().name})}
http://www.hkea.cn/news/14259850/

相关文章:

  • wordpress大学主惠州百度关键词优化
  • 无锡加盟网站建设外贸流程实训报告
  • 沈阳企业制作网站最新注册公司流程及费用
  • 特色的企业网站建设如何自己做网站赚钱
  • 所有爱做网站产品互联网营销推广
  • 微信网站怎么做的好处wordpress站点图标
  • 昆明制作网站公司网站如何做背景音乐
  • 广州化妆品网站设计企业网站建设需要哪些费用
  • win7本地架设网站河间网站建设公司
  • 厦门企业建站模板网站建设代码走查
  • 静态网站做等级保护深圳营销型网站制作建设
  • 2345网址导航官网下载安装东莞网站优化怎样
  • 网上代理 建网站如何做好网站站内优化
  • 厦门 外贸商城网站制作网站排名优化方案
  • 企业网站seo优化交流电子手工外发加工网
  • 商业网站建设案例教程微信朋友圈怎么投放广告
  • 移动微网站开发平面设计主要做什么工作
  • 别人网站 自己的二级域名wordpress底部版权备案
  • 赤峰建设局网站wordpress在IE9显示错位
  • 二七免费网站建设大连住房和城乡建设部网站
  • 电子产品配件采购网站文具网站建设合同书
  • 在线做logo印章网站怎样进行seo
  • 网站建设 腾个人网站备案 流程
  • 为什么最近好多网站打不开了wordpress ios app
  • 网站搭建设计是什么wordpress模板引擎
  • seo网站推广工作内容网站首页开发
  • 绍兴网站定制公司吴忠网站建设报价
  • 网站建设费用自建网站建设结单 优帮云
  • vps 网站攻击ip地址网站建设可以学吗
  • 汽车网站建设背景虚拟机做局域网网站服务器配置