在往期 #11WeeksOfAndroid 系列文章中我们介绍了 联系人和身份、隐私和安全、 Android 11 兼容性 ,本期将 聚焦语言 。我们将为大家陆续带来 #11WeeksOfAndroid 内容,深入探讨 Android 的各个关键技术点,您不会错过任何重要内容。
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证。近期也已移植到 Android / macOS / Win32 / POSIX 平台,一并开源。
近几年来,协程在 C/C++ 服务器中的解决方案开始涌现。本文主要阐述以汇编实现上下文切换的协程方案,并且说明其在异步开发模式中的应用。
与其他编程语言相比,C++ 加入协程较晚,从C++20开始支持。在协程出现之前,C++ 程序员有两种选择:
近日,国际标准化组织(ISO)C++ 组,21 工作组(WG21)正式通过了最终版本的“C++20”草案。
背景 基于跨平台考虑,微信终端很多基础组件使用 C++ 编写,随着业务越来越复杂,传统异步编程模型已经无法满足业务需要。Modern C++ 虽然一直在改进,但一直没有统一编程模型,为了提升开发效率,改善代码质量,我们自研了一套 C++ 协程框架 owl,用于为所有基础组件提供统一的编程模型。 owl 协程框架目前主要应用于 C++ 跨平台微信客户端内核(Alita),Alita 的业务逻辑部分全部用协程实现,相比传统异步编程模型,至少减少了 50% 代码量。Alita 目前已经应用于儿童手表微信、Lin
作者:peterfan,腾讯 WXG 客户端开发工程师 背景 基于跨平台考虑,微信终端很多基础组件使用 C++ 编写,随着业务越来越复杂,传统异步编程模型已经无法满足业务需要。Modern C++ 虽然一直在改进,但一直没有统一编程模型,为了提升开发效率,改善代码质量,我们自研了一套 C++ 协程框架 owl,用于为所有基础组件提供统一的编程模型。 owl 协程框架目前主要应用于 C++ 跨平台微信客户端内核(Alita),Alita 的业务逻辑部分全部用协程实现,相比传统异步编程模型,至少减少了 5
将 libco 和 libevent 两者的功能糅合起来,所以我把我的工程,命名为 libcoevent,意为 “基于 libevent 的同步协程服务器编程框架”。
近日,首届官方举办的 Kotlin 专题会议 KotlinConf 正式开幕,来自世界各地约 1200 名与会者齐聚旧金山,在这场盛大的 KotlinConf 大会主题演讲中,Kotlin 的首席语言设计师 Andrey Breslav 公布了一系列与 Kotlin 紧密相关的重大发展成果。接下来,我们不妨关注一下。
在liunx系统中 没有进程和线程的区别 统称 “task” 进程标志(task_struct) 进行统一描述
Kotlin 1.2 的发版节奏越来越快了。从 16 年 2 月 19 日发布 1.0 到 17 年 3 月 14 日发布 1.1,这次只花了半年多的时间,厉害了。1.1 发布的时候让人比较激动的是有了协程这样一个杀手级的特性,以及正式支持的 JavaScript Target,那么现在半年过去了,Native 搞得风生水起,1.2 又会给我们带来什么呢?
Hi你好,新同学。很高兴,你终于追寻这个问题了,也许你正感到迷茫,各路大神对协程的理解不一,有人说它是线程框架,有人说它比线程更轻,希望我这篇博文可以帮你从另一个角度简单理解协程。
Kotlin-Native 的定位略显尴尬,为什么这么说呢?因为现在的编程语言实在太多了,新语言出来必然要解决现有某个语言的痛点,这样才能快速切入该语言所覆盖的领域。Kotlin 也是这样在当年崭露头角的,要不是 Android 上没有很好的替代语言,估计 Kotlin 也不会这么快进入大家的视野。
网上几乎全部介绍Kotlin的文章都会说Kotlin的协程是多么的高效,比线程性能好很多,然而事情的真相真是如此么?
这是一份写给Android工程师的协程指南,希望在平静的2023,给大家带来一些本质或者别样的理解。
开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来。
在音视频领域接触最多实现的方案通常是通过ffmpeg(PC和sever端居多)或者硬件厂家的的SDK实现特定硬件的编解码功能(机顶盒,电视等嵌入式设备)。这里我们介绍一个在国内不太常用的解决方案----gstreamer媒体库
Kotlin 协程 让我们可以用同步代码来建立异步问题的模型。这是非常好的特性,但是目前大部分用例都专注于 I/O 任务或是并发操作。其实协程不仅在处理跨线程的问题有优势,还可以用来处理同一线程中的异步问题。
Android相关的火热技术最近几年也是频出,没事就在刷屏,我来说说对这些火热技术的看法。
Rust作为一门新兴语言,主打系统编程。提供了多种编写代码的模式。2019年底正式推出了 async/await语法,标志着Rust也进入了协程时代。下面让我们来看一看。Rust协程和Go协程究竟有什么不同。
【编者按】C++ 四十年,历久弥新长盛不衰。几日前 CSDN 组织了一次 C++ 直播对话,在非常短的时间内就吸引了两万多开发者观看,足以说明 C++ 在开发者中的影响力。本文的四位作者联合撰文,写下了这篇两万字的长文,深度总结了 C++ 的新进展,以及未来的演进方向,值得所有开发者收藏。 作者 | 祁宇 许传奇 袁秩昊 卜恪 责编 | 唐小引 出品 | 《新程序员》编辑部 不平凡的 2022 年已经过去了,受到疫情影响,C++ 标准委员会(以下简称委员会)只能在线上 Review 提案,效率较低,但在
协程以前一直是Kotlin作为实验性的一个库,前些日子发现1.3版本的kotlin relese了协程,所以就找时间研究了一下,本来早就想写这篇文章了,但是因为离职换工作的原因,迟迟未能动笔,这两天终于算搞完了,记录一下我对协程的一些理解。
内容来源:2018 年 5 月 20 日,腾讯企点开放平台技术负责人熊月在“PHPCon China 2018 技术峰会”进行《嵌入式PHP的探索实践》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。
在移动应用开发中,Android卡顿是一个常见但令人讨厌的问题,它可能导致用户体验下降,甚至失去用户。本文将深入探讨Android卡顿的原因,以及如何通过代码优化和性能监测来提高应用的性能。
作者:Leffiy 编辑:木环 本文转载自:infoQ公众号 “ 保留后台敏捷同步风格,同时提高系统并发能力或许不难。但如果优化对象是拥有8亿月活、体量超大的微信后台呢?且看微信是如何漂亮地完成异步化的。 编者按 如今,微信拥有月活跃用户8亿。不可否认,当今的微信后台拥有着强大的并发能力。不过, 正如罗马并非一日建成;微信的技术也曾经略显稚嫩。 微信诞生于2011年1月,当年用户规模为0.1亿左右;2013年11月,微信月活跃用户数达到3.55亿,一跃成为亚洲地区拥有最大用户群体的移动终端即时通讯软件。面对
Go 编程语言是一个开源项目,它使程序员更具生产力。Go 语言具有很强的表达能力,它简洁、清晰而高效。得益于其并发机制, 用它编写的程序能够非常有效地利用多核与联网的计算机,其新颖的类型系统则使程序结构变得灵活而模块化。 Go 代码编译成机器码不仅非常迅速,还具有方便的垃圾收集机制和强大的运行时反射机制。 它是一个快速的、静态类型的编译型语言,感觉却像动态类型的解释型语言。(摘取自官网)
这篇文章描述工作观察到的开发现状中存在的问题, 因为目前业务后台开发语言绝大多数都是C++, 并针对现状, 试图给出一个在 Golang 的开发生态 下的一些解决方案。
C++ 在互联网服务端开发方向依然占据着相当大的份额;百度,腾讯,甚至以java为主流开发语言的阿里都在大规模使用C++做互联网服务端开发,今天以C++为例子,分析一下要支持协程,需要考虑哪些问题,如何权衡利弊,反过来也可以了解到协程适合哪些场景。
● 论文一的研究对象是纯内存计算的 OLTP 引擎,作者通过引入 C++ 20 的 coroutine 特性将 thread-to-transaction 的执行模型修改为两级 coroutine-to-transaction,在不需要内部接口改动的条件下实现了事务间的 batch 机制和基于协程的 prefetch,减少了后续计算的 cache miss,提升了事务的整体执行性能。
今天我们来聊聊Kotlin的协程Coroutine。 如果你还没有接触过协程,推荐你先阅读这篇入门级文章What? 你还不知道Kotlin Coroutine? 如果你已经接触过协程,但对协程的原理存
协程(Coroutine)是C++20引入的一项重要特性,它为程序设计提供了更高层次的控制流抽象,允许非阻塞式的异步编程模型,而无需复杂的回调函数或者状态机。本文旨在深入浅出地介绍C++协程的基本概念、使用场景、常见问题、易错点及避免策略,并通过实例代码加深理解。
这段时间看了一些Go语言相关的东西,发现Go语言的最大特性并发模型类似于C++里面的线程池,正好我们项目服务器也是用的线程池,记录下。 Go语言的并发单位是语言内置的协程,使用关键字go+函数创建一个新的协程,新创建的协程会自动加入到协程调度上下文的等待调度队列,一个协程调度上下文对应一个线程,一个协程调度上下文对应多个协程。新加入的协程会动态负载到各个调度上下文,如果所有调度上下文的平均负载较高时,总调度器会自动创建新的线程和对应的调度上下文用于工作。整体上看,是N个线程:N个调度上下文:M个协程的关
从 Room 2.1 版本之后,开发者们可以通过定义 suspend DAO 函数来使用 Kotlin 协程了。协程在处理异步操作时表现得异常优秀,它可以让您用顺序自然的代码处理诸如操作数据库一类的耗时操作,而不再需要专门在线程之间来回切换任务、处理结果或错误了。Room 支持协程后,可以在数据库操作中使用由并发作用域、生命周期、嵌套所带来的一些便利。
进程,是计算机中已运行程序的实体。程序本身只是指令、数据及其组织形式的描述,进程才是程序的真正运行实例。
从事Android开发的童鞋都知道,自从去年的Google I/O大会上Kotlin被定为Android开发的官方语言以来,关于Kotlin就成为每个开发人员学习的目标,的确,Kotlin以它独有的魅力正在吸引这传统的Java程序开发人员。或许很多的童鞋已经对Kotlin进行了深入的学习,甚至已经运用到了自己的项目当中,但是还有较多同学可能只是听过Kotlin或简单了解过,本文将从宏观的角度来介绍Kotlin相关的内容。 在介绍Kotlin之前,先来安利一波,本人去年年底开始写作的关于Kotlin的书下个月就要出版了,有兴趣的可以关注下,目录如下。
要是对协程的使用感兴趣的话,可以看看这篇文章简单了解一下瞅一眼就会使用GO的并发编程分享
既然本系列讲的是基于汇编的 C/C++ 协程,那么这篇文章我们就来讲讲使用汇编来进行上下文切换的原理。
2021-03-11:go中,协程内部再启用协程,它们是没关系,对吧?外部协程奔溃,内部协程还会执行吗?外部协程执行结束的时候,如何让内部协程也停止运行?golang原生提供的包里,让内部协程停止运行,如何实现?
从reddit/hackernews/lobsters/purecpp知乎等等摘抄一些c++动态
错误指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中
移动端跨平台技术自移动开发诞生以来一直是个热门话题,一是持续关注研发效率,降本提效;二是一套代码多端运行可以提升多端业务逻辑的一致性;三是跨端技术方案通常意味着更佳的高效运维和缺陷修复。
点个关注👆跟腾讯工程师学技术 导语 | 本文我们将尝试对整个 C++的协程做深入浅出的剖析,方便大家的理解。再结合上层的封装,最终给出一个 C++异步框架实际业务使用的一种形态,方便大家更好的在实际项目中应用无栈协程。 浅谈协程 在开始展开协程前,我们先来看一下一些非 C++语言中的协程实现。 (一)其他语言中的协程实现 很多语言里面,协程是作为 "一类公民" 直接加入到语言特性中的, 比如: Dart1.9示例代码 Future<int> getPage(t) async {
每种编程语言都有其独特的语法,而特定的语法也反映了该编程语言被创建之初的意图,即为了解决某种旧语言的一些痛点。比如说Golang的发明,Google公司最开始还是使用C++来做工程开发,但C++有一些明显的痛点,比如说编译速度很慢,大型项目的一次构建长达2小时以上,同时还存在内存泄漏的风险,其次对并发的支持也不是很好,那么Google的几个大佬在C++语言的基础上,进行了一些修正,具体可见于Rob Pike关于go设计思路的那封邮件。
前面的文章中我们尝试从 C++17 和 C++20 的角度分别探讨过其中无栈协程的包装机制和使用, 但其中的设计由来, 原理, 剥析的并不多. 这也导致对相关特性不太熟悉的读者要理解相关内容存在比较大的成本. 本篇我们将更多的回归原理, 背后的设计, 尝试对整个C++的协程做深入浅出的剥析, 方便大家的理解. 再结合上层的封装, 最终给出一个C++异步框架实际业务使用的一种形态, 方便大家更好的在实际项目中应用无栈协程. PS: 本文的主要内容与IEG课程 <> 基本一致, 文字版细节更多, 更适合阅读.
作者:fangshen,腾讯 IEG 游戏客户端开发工程师 导语 本文我们将尝试对整个 C++的协程做深入浅出的剥析, 方便大家的理解. 再结合上层的封装, 最终给出一个 C++异步框架实际业务使用的一种形态, 方便大家更好的在实际项目中应用无栈协程。 1. 浅谈协程 在开始展开协程前, 我们先来看一下一些非 C++语言中的协程实现. 1.1 其他语言中的协程实现 很多语言里面, 协程是作为 "一类公民" 直接加入到语言特性中的, 比如: 1.1.1 Dart1.9 示例代码 Future<int> get
协作式调度是指以多个任务之间以协作的方式切换执行,每个任务执行一会,任务执行到某个点时会自己让出当前资源交给其他正在等待的任务,这显得比较主动和自愿。
go 语句是Go语言中新增的关键字,用来实现 goroutine的这种并发操作,C++中并没有这种操作操作,C++中的并发操做采用的是多线程,而本作者觉得,go的这种原理其实于线程池是有些类似的。(备注关于C++的线程池部分,后续在做整理。)
最有意思的是居然把 Android 放到了最后,hmmm,Kotlin 开发者里面搞 Android 的应该是最多的吧?这么不受待见?
这是 #11WeeksOfAndroid 系列的最后一篇文章。感谢您在过去的时间里和我们一起深入探索 Android 开发的关键领域。下面来和我们一起回顾这些精彩内容吧:
领取专属 10元无门槛券
手把手带您无忧上云