- 博客(33)
- 收藏
- 关注
原创 Kotlin 协程到底运行在哪个线程里
与其说协程是一个轻量级线程,我更愿意把它当然一个个待执行/可执行的任务。这样就引申出一个问题——协程是运行在哪个线程上的?这就是本篇文章想要探讨的问题,同时我们也将学习如何让协程在特定的线程里执行。
2020-03-31 20:44:23 1301
原创 kotlin 协程上下文那点事
用线程做类比的话,协程的 context 可以认为是协程的“线程私有变量”,同时这个私有变量是不可变的。也就是说,我们在创建一个协程的时候,他的 context 携带的信息就已经确定了下来
2020-03-28 09:56:30 452
原创 如何使用 Java 和 double-check 实现支持多实例的单例
考虑这样一个需求,我们有两个业务 A 和 B,他们共同使用一个硬盘缓存 `DiskCache` 的实现。由于在单个业务内只需要一份缓存,这很容易让我们想到单例模式。在本篇文章中,我们从最简单的传统的单例模式的实现开始,一步步实现一个优雅高效的多实例的单例模式。
2019-05-26 21:13:27 364
原创 Android native 崩溃信息捕获实践
本篇是 bugly 一篇关于 native crash 捕获的文章的练习。由于他文章中已经给出了相关的大部分知识点,这里我就仅仅补充一些细节,并给出一个完整的 demo
2019-04-06 11:41:47 2746 9
原创 Android P 源码分析 5 - Low memory killer 之 lmkd 守护进程
lmkd 是在应用层实现的取代原有 lowmemorykiller 驱动的守护进程。通过监听 memory pressure 事件,lmkd 可以在内存 low、medium 和 critical 的时候得到通知,进而回收优先级比较低的进程
2019-03-23 12:15:49 2460
原创 Android P 源码分析 4 - logd 的初始化
为了跟老罗的书保持一个比较一致的步伐,这一篇开始我们来看 logd 的实现。当然,这个 logd 不是老罗书里讲的 log 驱动,而是在应用层实现的一个守护进程。
2019-03-20 20:26:02 1655
原创 Android P 源码分析 3 - SharedPreferences 源码分析
本来按顺序这一篇应该是 logd,但突然有点好奇 SP 在保存数据的时候是怎么同步的,就还是先看 SP 吧,当做在开始啃 logd 这个硬骨头前轻松一下(虽然这么说,SP 还是有很多值得我们学习的地方的)。
2019-03-19 10:29:29 484 1
原创 Android P 源码分析 2 - 强弱指针的实现
继上篇我们学习了 Android 轻量级指针的实现,是时候来看“重量级”指针的实现了。在 Android 里,“重量级”指针指的是 `RefBase` 和 `sp/wp` 配合使用的情况,它提供了完整的强、弱指针的支持。
2019-03-12 13:13:23 454
原创 Android P 源码分析 1 - 轻量级智能指针的实现
作为 Android 源码分析系列文章的第一篇,我们先看 LightRefBase 的源码,热热身。
2019-03-09 19:28:26 530
原创 Java 程序员眼里的 Linux 内核 —— wait_event 源码分析
看 Linux 的 wait_event 源码时,联想到我们平时经常用得比较多的 wait/notify、double-check 和 volatile,突然意识 wait_event 简简单单几行代码的背后,涉及的知识点其实非常丰富。本篇文章我们就一起了来探索它背后的知识,然后尝试着和我们的日常开发关联起来。wait_event这里使用 Linux-2.6.24 版本的源码背景在某些...
2018-12-16 17:30:17 514
原创 Linux 内核页表的创建
原文地址 jekton.github.io,未经允许,不得转载。源码使用 Linux 2.6.24,基于 x86 平台;参考书是《深入理解 LINUX 内核》第三版内核跟普通的应用一样,为了使用虚拟内存,也需要一个给 CPU 设置一个页表。在这篇文章中,我们就一起来了解 Linux 是如何为内核创建页表的。需要注意的是,这里我并不打算详细讲解页表的方方面面,硬件相关的基础知识,读者可以...
2018-11-25 11:34:03 1168 1
原创 Java - synchronized 那些事
由于功率墙的影响,现代 CPU 倾向于使用多个核心(core)来提高其整体性能。这意味着,软件开发人员不再能够像以前一样,把软件放两年,再拿出来,它的性能就变得足够好了。为了充分利用多核 CPU 的能力,我们也必须进入多线程编程的世界。对 Java 程序员来说,这不是一件太困难的事。我们的语言本来就内置了同步功能。其中最常用的,莫过于 synchronized 关键字。他一共有两种用法: a...
2018-03-20 20:19:39 530
原创 自己实现 SharedPtr(3)—— 进一步的转型(cast)支持
在上一篇文章中,虽然我们实现了一部分的类型转换支持,但是,他对转型的支持还是非常不完善,远不能满足实际应用的需求。在这一篇文章中,我们将继续探讨SharedPtr的实现,完善他的转型功能
2016-05-07 16:54:35 776
原创 自己实现 SharedPtr(2) —— 类型转换、copy/move 语义的实现
既然叫做“SharedPtr”,那么我们就应该可以期望他能够处理正常的指针转换(包括其他类型转换)。此外,“shared”也要求他必须提供 move/copy 语言。在本文,我们将继续完善SharedPtr,为他增加 类型转换、move/copy 语言
2016-05-05 11:20:29 680
原创 自己实现 SharedPtr(1) —— 管理 Deleter
为了能够使用简化 SharedPtr 的使用,我们只能对他定义一个 Reference 昨晚模板参数。与此同时,我们也想支持任意类型的 deleter,这就引入了一个矛盾——我们如何声明这个 deleter 呢?
2016-04-30 16:30:06 1031 1
原创 Widget&& w{} 究竟表示什么?这跟 std::forward 又有什么关系
rvalue reference, rvalue, lvalue 和 std::forward 之间的联系
2016-01-15 13:16:05 683
原创 分享一道伯克利 CS 61A 关于高阶函数的一道Python作业题(3)
关于高阶函数的一道Python作业题 pow_church(m, n)的实现与分析
2015-12-14 17:56:03 1619
原创 分享一道伯克利 CS 61A 关于高阶函数的一道Python作业题(2)
Python 高阶函数 Church numerals 问题的部分解答
2015-12-14 17:05:24 1518
转载 分享一道伯克利 CS 61A 关于高阶函数的一道Python作业题(1)
The logician Alonzo Church invented a system of representing non-negative integers entirely using functions. The purpose was to show that functions are sufficient to describe all of number theory: if we have fu
2015-12-14 15:44:31 1349
原创 Linux 2.6 schedule() 切换进程时没有释放rq->lock却又为何不会导致死锁?
Linux 的 schedule()函数主要完成现场切换任务。而切换进程前,他并没有将runqueue上的锁解开。以尝试判断,我们几乎会认定这终将导致死锁。然而,故事并没有我们相信中的那么单纯……
2015-11-28 16:31:32 1428
原创 为什么Linux内核无法保证动态定时器的执行时间
每每谈到Linux的软件定时器,我们都要说,内核无法保证其执行时间,一般会延迟几百毫秒。几百毫秒这个一个数,绝对不是空穴来风,万物总归有其缘由。文章主要就和大家谈谈这么一个几百毫秒,究竟是从哪里冒出来的呢?
2015-11-26 11:25:15 760
原创 Linux 内核信号量(semaphore) __down() 函数浅析
Linux 内核信号量(semaphore)中的 __down() 函数浅析
2015-11-24 10:34:09 1727 1
原创 hlist_head / hlist_node 设计浅析
Linux内核中的 hlist_node 为什么使用 pprev 而不是简单的 prev
2015-11-18 10:44:45 1605
原创 Linux task_struct parent 和 real_parent 的区别
Linux task_struct parent 和 real_parent 的区别
2015-11-09 11:22:51 4193
原创 Java 网络编程[Elliotte R.H.] 中对InputStream.markSupported()方法的误解
Java 网络编程[Elliotte R.H.] 中对InputStream.markSupported()方法的误解
2015-11-02 16:45:59 2964
原创 Android Pitfall - 扒一扒RadioGroup 和 RadioButton
今天工作时,需要以编程方式对RadioGroup进行操作(包括清空、选中),结果却遇到了一个非常意外的结果—— radioButton.setChecked(true); 后,该按钮竟不会变为选中状态!在Android源码中一阵翻腾后(开源万岁啊),于是便有了这篇博文。
2015-08-07 21:27:39 1129
原创 Android Pitfall - Fragment.startActivityForResult(), requestCode == 65536
Android里,Fragment和Activity具有 startActivityForResult() 方法,但在支持库里,二者的表现却会有很大差异。
2015-08-06 20:52:04 1806
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人