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

做加盟正规网站运营一个app一年需要多少钱

做加盟正规网站,运营一个app一年需要多少钱,网络营销渠道优化,wordpress透明菜单同步和异步 同步指的是一种行为#xff1a;当执行IO操作的时候#xff0c;在代码层面上我们需要主动去等待结果#xff0c;直到结果返回阻塞指的是一种状态#xff1a;当执行IO操作的时候#xff0c;线程处于挂起状态#xff0c;就是该线程没有执行了 故同步不是阻塞当执行IO操作的时候在代码层面上我们需要主动去等待结果直到结果返回阻塞指的是一种状态当执行IO操作的时候线程处于挂起状态就是该线程没有执行了 故同步不是阻塞同步也可以是非阻塞的如在执行同步代码块时线程可以不阻塞而是一直在后台运行 代码中一般通过和多线程和回调来实现异步非阻塞 但多线程只是看上去同时执行底层原理是通过CPU调度来实现的当一个线程切换到另一个线程时通常需要 保存当前线程的执行上下文载入另一个线程的执行上下文 切换线程也是需要开销的故当线程切换很频繁时可能会导致多线程并不优于单线程 协程Coroutine 大量回调会使代码更加复杂且会存在多层次的回调同时线程切换的开销不可忽略而协程则可以避免这些问题 协程是一个无优先级的子程序调度组件允许子程序在特定的地方挂起恢复 进程包含线程线程包含协程一个线程可以有任意多个协程某一时刻只能由一个协程在运行多个协程分享该线程分配到的计算机资源 implementation org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1 implementation org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1使用Coroutine需要导入包如下通过launch构造了一个协程通过delay()挂起协程但不会阻塞线程 GlobalScope.launch {delay(1000L)println(World) } println(Hello, ) Thread.sleep(2000L)线程是由操作系统来调度的而协程的切换可以由程序自己来控制协程可以创建很多个而线程是有限的 launch和runBlocking delay只能在协程内部使用用于挂起协程不会阻塞线程sleep用来阻塞线程 未避免混淆可以使用runBlocking创建主协程而使用launch创建子协程从而在内部都使用delay()但需要注意runBlocking依旧会阻塞当前执行的线程 fun test() runBlocking {GlobalScope.launch {delay(1000L)println(World)}println(Hello, )delay(2000L) }协程声明周期和join 当执行耗时操作但并不知道需要多久时为使程序一直保活可以使用join 如下程序会一直等待直到协程结束这里的等待是非阻塞式不会将当前线程挂起suspend修饰的方法只能在协程内部或其他suspend方法中使用 fun test() runBlocking {val job launch {search()}println(Hello,)job.join() }suspend fun search() {delay(1000L)println(World) }用同步方式写异步代码 在下面代码中两个方法是顺序执行的 fun test() runBlockingUnit {val one searchOne()val two searchTwo()println(search is ${one} and ${two}) }suspend fun searchOne() {delay(3000L)println(one) }suspend fun searchTwo() {delay(1000L)println(two) }打印如下 one two search is kotlin.Unit and kotlin.Unit为了让其并行执行可以使用async和await 使用async相当于创建了一个子协程会和其他子协程一样并行工作async返回Deferred是一个非阻塞可取消的future其是一个带有结果的job而Launch也会返回一个job但无返回值future的意思是将来会返回一个结果利用await可以等待返回值查询到之后获取出来 fun test() runBlockingUnit {val one async { searchOne() }val two async { searchTwo() }println(search is ${one.await()} and ${two.await()}) }打印如下 one two search is kotlin.Unit and kotlin.Unit共享资源控制 锁 如对于下面的数据 val goods hashMapOfLong, Int() goods.put(1, 10) goods.put(2, 15)Synchronized 使用Synchronized或synchronized()实现加锁 Synchronized fun buyGoods(id: Long) {val stock goods.getValue(id)goods.put(id, stock - 1) } fun buyGoods2(id: Long) {synchronized(this) {val stock goods.getValue(id)goods.put(id, stock - 1)} }Lock var lock: Lock ReentrantLock() fun buyGoods3(id: Long) {lock.lock()try {val stock goods.getValue(id)goods.put(id, stock - 1)} catch (ex: Exception) {println(ex)} finally {lock.unlock()} }上面写法有以下问题 若有多个同步方法将会竞争同一把锁加锁后可能忘记解锁重复的模板代码 fun T withLock(lock: Lock, action: () - T) {lock.lock()try {action()} catch (ex: Exception) {println(ex)} finally {lock.unlock()} } fun buyGoods(id: Long) {val stock goods.getValue(id)goods.put(id, stock - 1) } var lock: Lock ReentrantLock() withLock(lock, { buyGoods(1) })上面使用高阶函数进行了优化库函数也自带withLock()方法 fun buyGoods(id: Long) {val stock goods.getValue(id)goods.put(id, stock - 1) } var lock: Lock ReentrantLock() lock.withLock({ buyGoods(1) })
http://www.hkea.cn/news/14436388/

相关文章:

  • 松阳建设网站向国外卖货的电商平台
  • 域名注册服务商网站免费咨询的方法
  • 如何建设国际网站首页Wordpress如何加联盟广告
  • 网站建设和维护面试题合肥建设集团招聘信息网站
  • 英国网站后缀佛山网站建设专业品牌
  • 做网站的价格参考天津多媒体设计公司
  • 怎么用织梦源代码做网站上海前十名文化传媒公司
  • 为什么上传网站模板网站上没有文字和图片wordpress注册提示404
  • 天津网站建设noakj想在微信公众号上做网站链接
  • 广州网站制作到诺然wordpress一键排版
  • 网站做地区定位跳转wordpress 阿里短信
  • 品牌网站建设3a小蝌蚪东莞事件最新消息新闻
  • 企业网站的购买方式wordpress设置密码
  • 网站建设亿码酷出名5城阳网站建设公司
  • 付费阅读插件wordpress网站做优化一般几个字
  • php 企业网站系统下载个人网站模板之家
  • 网站如何做词网站建设都用什么软件
  • 精品课程网站建设内容wordpress 爱无
  • 大气环保网站模板马化腾称视频号是全公司希望
  • 网站做点击收费标准中国包装创意设计大赛
  • 网站访问大小 计算流量全国企业信息公示查询系统官网
  • 哈尔滨网站建设有限公司网站做外链是什么意思
  • 外文网站制作地推的60种方法
  • 广西网站建设产品优化怎么做网站教程++用的工具
  • 寻找企业网站建设通辽市做网站公司
  • 网站开发框架 知乎dyndns免费域名
  • 外国人做外贸都会浏览哪些网站wordpress主题视频
  • 手机网站安全证书过期怎么处理哪些企业网站做得好
  • 营销型网站如何建设郑州新一网站建设
  • 网站名和域名的区别wordpress标题设置方法