go

CircuitPython 6.0.0发布了

余生长醉 提交于 2020-11-20 14:57:59
CircuitPython 6.0.0正式版本已经发布。 移植情况 CircuitPython有许多 "移植",是各种微控制器系列的核心实现。每个移植版本的稳定性各不相同。截至本版本,F4系列的atmel-samd, nrf和stm32是稳定的。cxd56, esp32s2和stm其它型号正在积极改进,但可能会有功能缺失和bug,litex和mimxrt10xx处于alpha状态,会有bug和功能缺失。 从5.x开始的主要新功能和改进 新增ESP32-S2芯片的移植。 RGBMatrix 显示支持。 countio 模块以计数脉冲。 watchdog控制硬件看门狗定时器。仅在某些芯片上。 vectorio提供原始displayio。 canio 为CAN总线操作提供支持。 _bleio 增加了对基于HCI的BLE协处理器(如AirLift板)的支持。 aesio 提供对AES计算的支持。 async/await默认在许多版本中可用;支持得到改善。 网络模块进行了改造,增加了 wifi、socketpool、ssl 等模块。停用了 socket、wiznet5k 和network 模块。它们将在 7.x 中被移除,转而使用网络库。 更新stage和pew库。 _pixelbuf 改进。 改进的USB串口检测。 json 现在可以从流对象读取。 pulseio.PWMOut 被拆分到

Go part 2 基础语法

我们两清 提交于 2020-11-20 08:46:26
关键字、标识符 标识符: 是用户或系统定义的有意义单词组合,或单词与数字组合(具体意义有定义者决定)    标识符以字母下划线开头,大小写敏感, 比如:boy, Boy, _boy, _(匿名变量,用来忽略结果) 标识符命名规范:在习惯上,Go语言程序员推荐使用驼峰式命名,当名字有几个单词组成的时优先使用大小写分隔,而不是优先用下划线分隔。因此,在标准库有QuoteRuneToASCII和parseRequestLine这样的函数命名,但是一般不会用quote_rune_to_ASCII和parse_request_line这样的命名。而像ASCII和HTML这样的缩略词则避免使用大小写混合的写法,它们可能被称为htmlEscape、HTMLEscape或escapeHTML,但不会是escapeHtml。 关键字: 是 Go 语言提供的有特殊含义的符号,也叫做“保留字” 系统保留关键字: break default func interface select case defer go map struct chan else goto package switch const fallthough if range type continue for import return var 常量与变量 常量 常量使用 const 修饰,表示是只读的,不能修改 const 只能修饰

go笔记-pprof使用

自闭症网瘾萝莉.ら 提交于 2020-11-20 07:18:36
pprof如何进行采样: https://studygolang.com/articles/11873 go tool pprof http://localhost:6060/debug/pprof/profile go tool pprof http://localhost:6060/debug/pprof/heap go tool pprof http://localhost:6060/debug/pprof/block go tool pprof http://localhost:6060/debug/pprof/mutex cpu(CPU Profiling): $HOST/debug/pprof/profile ,默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件 block(Block Profiling): $HOST/debug/pprof/block ,查看导致阻塞同步的堆栈跟踪 goroutine: $HOST/debug/pprof/goroutine ,查看当前所有运行的 goroutines 堆栈跟踪 heap(Memory Profiling): $HOST/debug/pprof/heap ,查看活动对象的内存分配情况 mutex(Mutex Profiling): $HOST/debug/pprof/mutex

Goroutine 泄露排查

╄→尐↘猪︶ㄣ 提交于 2020-11-20 07:17:17
我们在发布一个 go 应用时,默认都会启用两个 http handler: 一个是 pprof,方便线上动态追踪问题;另外一个是 prometheus 的 metrics,这样就可以通过 grafana 准实时的监控当前 runtime 信息,及时预警。就像下面这样: package router import ( "net/http" _ "net/http/pprof" "github.com/prometheus/client_golang/prometheus/promhttp" ) func InitAdmin () { adminRouter := http . DefaultServeMux adminRouter . Handle ( "/metrics" , promhttp . Handler ()) adminServer = & http . Server { Addr : ":8081" , Handler : adminRouter , } go func () { if err := adminServer . ListenAndServe (); err != nil { println ( "ListenAndServe admin: " , err . Error ()) } }() } 最近我在优化一个 push 服务的时候,便观察到了一个

.NET 5 中的隐藏特性

牧云@^-^@ 提交于 2020-11-19 20:14:11
转自:hez2010 cnblogs.com/hez2010/p/13963803.html 前言 双十一当天,个人觉得非常香,并且花了 10 分钟时间就把自己的 4 个 .NET Core 3.1 的项目升级到了 .NET 5,堪称无痛。 但是,.NET 5 中还有一些没有正式公开的隐藏特性,那么现在就开始介绍吧。 Crossgen 2 Crossgen 其实就是众所周知的 ReadyToRun 特性。该功能将你的程序集进行一定程度的 AOT 编译,然后在运行时跟踪热路径对一些方法进行带有更多优化的 JIT 编译,即分层编译,这使得程序集的加载速度大幅提高。 但是 .NET 5 其实带了 Crossgen 的下一个版本:Crossgen 2。 Crossgen 2 的代码几乎是从 CoreRT 继承而来,并在此基础上做了很大改进。CoreRT 可以对 .NET 程序集进行完全的原生优化编译,编译出来的东西就是完全 native 的,和 Go 的体验完全一致。 Crossgen 2 则使用了这套方法,将你的程序集在支持范围之内进行 Native AOT 编译,然后运行时直接加载启动,并根据运行情况再使用 JIT 编译器进行进一步的优化,是一种混合 AOT 策略。 为什么说在支持范围之内呢?因为 Native AOT 必然对动态加载和 Emit 等特性不友好,但是 Crossgen

TiDB 的现在和未来

∥☆過路亽.° 提交于 2020-11-19 14:04:28
本文根据黄东旭在 PingCAP D 轮融资线上发布会的演讲实录进行整理。 TiDB 的现在和未来 大家好,我是黄东旭,是 PingCAP 的联合创始人和 CTO,这是 PingCAP 成立以来的第一次发布会,我想跟大家简单聊聊 TiDB 在产品和技术上的更新。考虑到线上的很多观众不一定是有很强的技术背景,我将尽我所能将技术的部分说得让大家都能够理解。 在讲正题之前有一个小故事,我们做基础软件的产品经理去跟客户聊需求的时候,客户经常都会说:对于数据库,我的要求特别简单、特别基础、非常朴素,我不要求很多功能,安全稳定是必须的,最好能高可用,性能一定要好,如果数据量大了,能实现弹性伸缩就更好了;另外,最好别让我学太多新东西,用起来跟过去使用的产品差不多,这就是一款完美的数据库产品。 就像大家在家里用自来水一样,我们对自来水的需求就是拧开水龙头水就能出来,但是背后自来水厂是怎么处理的大家不用知道,我们只需要根据实际情况使用冷水或者热水就好。但是从技术的角度来说,刚才类似冷热水这个非常朴素的基础需求,类比一下放到数据库的世界这就是一个图灵奖级别的基础需求,稍微解释一下图灵奖是计算机行业学术界最顶级的,相当于计算机界的诺贝尔奖。 这里有两位行业泰斗级的人物,左边 Leslie Lamport 在 2013 年研究相关问题拿了图灵奖,右边这位跟我们挺有缘的,发型跟(我们的 CEO)刘奇同学挺像

Python虚拟机之for循环控制流(二)

余生颓废 提交于 2020-11-19 05:47:23
Python虚拟机中的for循环控制流 在 Python虚拟机之if控制流(一) 这一章中,我们了解if控制流的字节码实现,在if控制结构中,虽然Python虚拟机会在不同的分支摇摆,但大体还是向前执行,但是在for循环控制结构中,我们将会看到一种新的指令跳跃方式,即指令回退。在 if控制流 章节中,我们看到了指令跳跃时,通常跳跃的距离都是当前指令与目标指令之间的距离。如果按照这种逻辑,进行回退时,这个跳跃是否是负数呢?别急,我们下面一点一点来剖析for循环控制流的实现 # cat demo3.py lst = [1, 2] for i in lst: print(i) # python2.5 …… >>> source = open("demo3.py").read() >>> co = compile(source, "demo3.py", "exec") >>> import dis >>> dis.dis(co) 1 0 LOAD_CONST 0 (1) 3 LOAD_CONST 1 (2) 6 BUILD_LIST 2 9 STORE_NAME 0 (lst) 2 12 SETUP_LOOP 19 (to 34) 15 LOAD_NAME 0 (lst) 18 GET_ITER >> 19 FOR_ITER 11 (to 33) 22 STORE_NAME 1 (i) 3

系列文章:Kubernetes中日志的正确输出姿势

可紊 提交于 2020-11-19 05:31:40
https://yq.aliyun.com/articles/744265 前言 上一期主要和大家介绍从全局维度考虑如何去构建K8s中的日志系统,本期我们从实践角度出发来一步步构建K8s中的日志监控体系。构建日志系统的第一步是如何去产生这些日志,而这也往往是最繁杂最困难的一步。 2009年阿里云春节上班第一天,在北京一间连暖气都没有的办公室里,一帮工程师一边口呼白气,一边敲出了“飞天”的第一行代码。“飞天”作为阿里云的核心技术平台,其英文名Apsara——来自吴哥王朝的阿仆萨罗飞天仙女的名字。 阿里云飞天系统的第一行代码就是为了编写一个日志系统,而现在apsara logging的日志库应用在飞天所有的系统中,包括盘古、女娲、伏羲、洛神... Kubernetes中日志重要性 通常日志最基础的作用是记录程序的运行轨迹,在此之上会衍生出非常多的功能,例如线上监控、告警、运营分析、安全分析等等(详情可以参见第一篇文章),这些功能反过来也对日志具备一定的要求,我们需要尽可能的将日志规范化,以减少收集、解析、分析的代价。 在Kubernetes中,环境的动态性很强,日志基本上都是易失的,因此需要实时将日志采集到中心的存储中,为了配合日志采集,对于日志的输出、采集会有更多的要求。 下述我们列举了Kubernetes中,日志输出的常见注意事项(其中标记 (*

Dubbo 云原生之路

独自空忆成欢 提交于 2020-11-19 03:53:29
本文作者:o****0 【Dubbo 云原生之路】系列开篇 作者:刘军 花名陆龟,Github 账号 Chickenlj,Apache Dubbo PMC,项目核心开发,见证了 Dubbo 重启开源,到从 Apache 基金会毕业的整个过程。现任职阿里云云原生应用平台团队,参与服务框架、微服务相关工作,目前主要在推动 Dubbo 3.0 - Dubbo 云原生。 纵观中国开源历史,你真的没法找到第二个像 Dubbo 一样自带争议和讨论热度的开源项目。 一方面,2011年,它的开源填补了当时生产环境使用的 RPC 框架的空白,一发布就被广泛采用;另一方面,它经历了停止维护、重启维护后捐献给 Apache 基金会、接着又以顶级项目的身份毕业。即便阿里努力对外展示开源投入的决心,在面对广受欢迎的后起之秀 Spring Cloud,和新生儿 Service Mesh 的夹击下,Dubbo 的路将怎么走下去?在云原生时代,它如何延续当前光芒? 今年是 Dubbo 从 Apache 基金会毕业的一周年,同时也是推进 Dubbo 3.0,即全面拥抱云原生的重要一年。 Dubbo 与开源中国共同策划 【Dubbo 云原生之路】 系列文章,和大家一起回顾 Apache Dubbo 社区的发展。系列文章主要涵盖 Dubbo 技术解读、社区运营、应用案例解析三大部分,之后每周都会和大家见面。 在这里

go-hystrix熔断机制

微笑、不失礼 提交于 2020-11-18 05:21:33
随着微服务的流行,服务之间的调用可能变得越来越复杂,一个业务流程可能需要调用五六个甚至更多服务,这就会导致,假设某个服务出现问题,严重可能出现服务器负载过高,导致服务雪崩的现象。 因此为了防止此现象的发生,决定了解下服务熔断机制,根据自身业务的需求,将其应用到服务中。 什么是熔断:可以联想到我们家里的电表的保险丝,当电压负载过高后,保险丝熔断,确保家里的电器等其他安全。 在我们的服务中,当我们当用第三方服务时失败到达一定的失败次数或者超时等问题时,我们将熔断机制融入到我们的客户端调用方,当失败次数等达到阈值时,开启熔断器,及时进行弥补处理,或者给上层友好提示。 在熔断器中有三种状态: 关闭:让请求通过的默认状态。如果请求成功/失败但低于阈值,则状态保持不变。可能出现的错误是超过最大并发数和超时错误。 打开:当熔断器打开的时候,所有的请求都会被标记为失败;这是故障快速失败机制,而不需要等待超时时间完成。 半开:定期的尝试发起请求来确认系统是否恢复。如果恢复了,熔断器将转为关闭状态或者保持打开 hystrix内部处理逻辑 go-hystrix example: package main import ( "fmt" "github.com/afex/hystrix-go/hystrix" "net/http" "time" ) func main() { hystrix