聊聊Dart多线程
和JS一样,Dart也是单线程模型,通过event queue在主线程中异步执行一些耗时操作, 总体来说和Javascript并无区别。那么,怎么在Dart中实现多线程呢?它的身上又有着什么不为人知的秘密呢?让我一一道来,揭开它神秘的面纱吧。
当我老了,也一样写代码。不因别的,只是爱好。
和JS一样,Dart也是单线程模型,通过event queue在主线程中异步执行一些耗时操作, 总体来说和Javascript并无区别。那么,怎么在Dart中实现多线程呢?它的身上又有着什么不为人知的秘密呢?让我一一道来,揭开它神秘的面纱吧。
在使用Flutter的Stream来实现一个打印机队列系统的时候, 发现了这么一个诡异的问题. 先简单说下代码. 其实很简单,就是当打印机状态不可用时, 我会调用StreamSubscripton.pause()
来暂停队列的消费, 当打印机变为可用后, 调用StreamSubscription.resume()
. 但是很诡异的是在resume后, 再想Stream里面投递消息后, Subscription仍然没有任何消息进来.
说一个有趣的是事情.
某天晨会的时候, 前端妹子提了一句: 最近后端接口的质量不是很高呢,有些字段和文档不一致,有些接口也缺失. 于是后端leader拉着其小伙伴到会议室开了一上午会,以为事情就告一段落了. 没曾想下午在前端这边开会时得知, 后端leader立了一个新规定: 如果以后接口质量不高,先从相关负责人开始罚,一次罚200, 两次double, 再找问题造成的实施人员进行罚款, 规则如上. 深感震惊之余, 果断劝退前端这边也想用这种“罚钱”模式来提高“质量”的念头, 采用了每周复盘的方式来达到同样的目的才作罢.
对于很多初学者来说,JS的上下文和堆栈等信息对于初学者甚至很多写了很多年js的人来说都可能一知半解甚至一问三不知, 经常容易犯诸如为什么xx变量居然是undefined啊,为什么执行顺序不是我想的那样之类云云. 虽然大多使用了ES6避免了很多JS的坑, 但是了解一些必要的基础知识对于写出高质量的代码来说是有利无害. 恰逢发现这篇写于多年前的文章, 讲解地非常通熟易懂, 于是翻译出来希望能够帮助到阅读此文的你. 当然, 有条件还是建议尽可能阅读原文.(原文链接在文末)
在命令行下我们一般情况下都是习惯使用ssh进行git的操作,但是某些情况只能使用https时只能使用账号密码登录时每次push等需要和git服务器进行交互的时候都提示我们输入账号和密码,经常push和fetch的时候这个操作是相当烦人的,那么如何保存git密码呢?
由于经常使用curl下载一些墙外面的东西,但是大家都懂的原因,需要设置代理。说一下设置代理的方法
使用Golang进行https进行请求时,遇到了failed to load system roots
的问题, 因为是跑在docker中的缘故,发现时没有安装ca-certificates,安装即可。
附alpine安装方法:
apk update && apk add ca-certificates
或者直接使用我做好的基础alpine镜像,将源切换到了ustc,安装了glibc解决golang使用cgo编译某些不能跑通的bug,同时安装了ca-certificates
镜像:
docker pull scofieldpeng/alpine:glibc-2.7