• Windows 下重定向当前进程的 stdout 到网络连接
    前段时间碰到一个需求,想把当前进程的标准输出重定向到一个 tcp 连接上。 如果依照 posix 标准,调用一下 dup2 这个 api 就能搞定,但是 windows 并不是基于 posix 标准的操作系统,所以做起来要麻烦的多。 我在 stackoverflow 和 msdn 上找了一番,没有看到什么靠谱的做法,所以自己折腾了一天。这里的难点在于:windows 上虽然有 _dup2 来模拟 posix 的 api dup2 ,但 fd ...
  • Golang面试专题 - Golang语言
    select 会随机选择一个可用通用做收发操作 2.Go 语言局部变量分配在栈还是堆? Go 语言编译器会自动决定把一个变量放在栈还是放在堆,编译器会做逃逸分析,当发现变量的作用域没有跑出函数范围,就可以在栈上,反之则必须分配在堆。 查看资料 3. 简述一下你对 Go 垃圾回收机制的理解? v1.1 STW v1.3 Mark STW, Sweep 并行 v1.5 三色标记法 v1.8 hybrid write barrier(混合写屏障:优化 STW) Golang 垃圾回收剖析...
  • 详尽干货!从源码角度看 Golang 的调度
    桔妹导读:本章主要从源码角度针对Go调度相关进行分析,从进程的启动,到调度循环分析,再到分析几个常见runtime下的场景可以清晰的了解调度过程。本文仅关注linux系统下的逻辑。代码版本参考Go1.9.2。—————▍阅读索引1.简单概念1.1 调度器的三个抽象概念:G、M、P1.2 调度的大致轮廓2.进程启动时都做了什么2.1 runtime.osinit(SB)方法针对系统环境的初始化2.2 runtime.schedinit(SB)调度相关的一些初始化2.3 runtime·mainPC(SB)启动...
  • Go错题册(二)
    不要对Go并发函数的执行时机做任何假设请看下列的列子:import ( "fmt" "runtime" "time")func main(){ names := []string{"lily", "yoyo", "cersei", "rose", "annei"} for _, name := range names{ go func(){ fmt.Println(name) }() } runtime.GOMAXPROCS(1) runtime.Gosched()}请问输出什么?答案:anneiannei...
  • golang之defer
    点击上方蓝色字体关注我们golang 中的延迟调用函数延迟调用函数(Deferred Function Calls)的调用方式如下:defer func_name(param-list)1 执行的时机func f1() (ret int) {defer func() {ret++}()return 0} func f2() (ret int) {tmp := 1defer func() {tmp = tmp + 10}()return tmp} func f3() (ret int) {defer func...
  • 华为方舟编译器做了些什么,让安卓有了“丝滑”的感觉 ?
    来自:码农翻身(微信号:coderising)本文来自木子的投稿,已获独家授权友情提示,这是一篇硬货,建议静心阅读。 敲黑板,先来讲几个术语:1. JIT全称是Just-in-time,即时编译;当Java字节码运行在JVM上的时候,JVM实时得把字节码编译成机器码就叫JIT。2. AOT全称是Ahead-of-time,预先编译;与JIT对应,你JIT不是实时的吗?那我先提前编译好,就是AOT。3. IR全程是Intermediate representation,即中间表示。中间表示是一个从原始表示到目...
  • 华为方舟编译器做了些什么,让安卓有了“丝滑”的感觉 ?
    来自:码农翻身(微信号:coderising)本文来自木子的投稿,已获独家授权友情提示,这是一篇硬货,建议静心阅读。 敲黑板,先来讲几个术语:1. JIT全称是Just-in-time,即时编译;当Java字节码运行在JVM上的时候,JVM实时得把字节码编译成机器码就叫JIT。2. AOT全称是Ahead-of-time,预先编译;与JIT对应,你JIT不是实时的吗?那我先提前编译好,就是AOT。3. IR全程是Intermediate representation,即中间表示。中间表示是一个从原始表示到目...
  • Go语言高阶:调度器系列(1)起源
    作者:shitaibin来源:简书如果把语言比喻为武侠小说中的武功,如果只是会用,也就是达到四五层,如果用的熟练也就六七层,如果能见招拆招也得八九层,如果你出神入化,立于不败之地十层。如果你想真正掌握一门语言的,怎么也得八层以上,需要你深入了解这门语言方方面面的细节。希望以后对Go语言的掌握能有八九层,怎么能不懂调度器!?Google、百度、微信搜索了许多Go语言调度的文章,这些文章上来就讲调度器是什么样的,它由哪些组成,它的运作原理,搞的我只能从这些零散的文章中形成调度器的“概貌”,这是我想要的结果,但这...
  • Go 程序是怎样跑起来的
    刚开始写这篇文章的时候,目标非常大,想要探索 Go 程序的一生:编码、编译、汇编、链接、运行、退出。它的每一步具体如何进行,力图弄清 Go 程序的这一生。在这个过程中,我又复习了一遍《程序员的自我修养》。这是一本讲编译、链接的书,非常详细,值得一看!数年前,我第一次看到这本书的书名,就非常喜欢。因为它模仿了周星驰喜剧之王里出现的一本书 ——《演员的自我修养》。心向往之!在开始本文之前,先推荐一下王晶大佬(以前在滴滴)的博客——《面向信仰编程》,他的 Go 编译系列文章,非常有深度,直接深入编译器源代码,我是...
  • Golang 并发编程与同步原语
    当提到并发编程、多线程编程时,我们往往都离不开『锁』这一概念,Go 语言作为一个原生支持用户态进程 Goroutine 的语言,也一定会为开发者提供这一功能,锁的主要作用就是保证多个线程或者 Goroutine 在访问同一片内存时不会出现混乱的问题,锁其实是一种并发编程中的同步原语(Synchronization Primitives)。在这一节中我们就会介绍 Go 语言中常见的同步原语 Mutex、RWMutex、WaitGroup、Once 和 Cond 以及扩展原语 ErrGroup、Semaphor...
  • Go 程序是怎样跑起来的
    刚开始写这篇文章的时候,目标非常大,想要探索 Go 程序的一生:编码、编译、汇编、链接、运行、退出。它的每一步具体如何进行,力图弄清 Go 程序的这一生。在这个过程中,我又复习了一遍《程序员的自我修养》。这是一本讲编译、链接的书,非常详细,值得一看!数年前,我第一次看到这本书的书名,就非常喜欢。因为它模仿了周星驰喜剧之王里出现的一本书 ——《演员的自我修养》。心向往之!在开始本文之前,先推荐一位头条大佬的博客——《面向信仰编程》,他的 Go 编译系列文章,非常有深度,直接深入编译器源代码,我是看了很多遍了。...
  • Golang 大杀器之跟踪剖析 trace
    在 Go 中有许许多多的分析工具,在之前我有写过一篇 《Golang 大杀器之性能剖析 PProf》 来介绍 PProf,如果有小伙伴感兴趣可以去我博客看看。但单单使用 PProf 有时候不一定足够完整,因为在真实的程序中还包含许多的隐藏动作,例如 Goroutine 在执行时会做哪些操作?执行/阻塞了多长时间?在什么时候阻止?在哪里被阻止的?谁又锁/解锁了它们?GC 是怎么影响到 Goroutine 的执行的?这些东西用 PProf 是很难分析出来的,但如果你又想知道上述的答案的话,你可以用本文的主角 g...
  • Swift5.0的Runtime机制浅析
    来自公众号:知识小集链接:https://juejin.im/post/5d29fb63e51d4510aa01159d导读:你想知道Swift内部对象是如何创建的吗?方法以及函数调用又是如何实现的吗?成员变量的访问以及对象内存布局又是怎样的吗?这些问题都会在这篇文章中得到解答。为了更好的让大家理解这些内部实现,我会将源代码翻译为用C语言表示的伪代码来实现。Objective-C语言是一门以C语言为基础的面向对象编程语言,其提供的运行时(Runtime)机制使得它也可以被认为是一种动态语言。运行时的特征之一...
  • 用Keras.NET 做一个图像识别的训练
    今天我会介绍一下Keras.NET并通过Keras.NET做一个图像识别的深度学习训练。Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、PlaidML以及CNTK后端。不少人喜欢用Keras进行模型训练。对于Keras.NET的封装,也依赖于Numpy.NET。这里有个比较特别的地方,需要下载源码,把Keras.NET/Numpy.NET基于不同平台对应的Python.Runtime版本的包添加重新设置编译,并在本地通过dll直接引用。CNN网络层级由输入层,卷积层,激活层,池化层,全连接FC层共5个部分组成,通过Keras可以很容易完成这5个部分的层级操作。
  • 探索 Flutter 异步消息的实现
    Event queue : 包含了所有的外部事件:I/O,鼠标点击,绘制,定时器,Dart isolate 的消息等,其实这块又根据消息的优先级细分成了两个队列,后面会有介绍。同样 Flutter 的 dart 代码是运行在一个叫 root isolate 的 isolate 中,下面简要列下 root isolate 的创建过程。在 dart vm 启动过程中会创建 vm isolate 和 PortMap,这两个的具体作用下面有介绍。b.创建 root isolate root isolate 是在 UI 线程中创建的,具体流程见 /src/flutter/runtime/dart_isolate.cc 的 CreateRootIsolate 方法。由于 isolate 是对当前线程执行环境的一个抽象表示,所以其内部存储了很多信息,对于异步消息这块有四个关键的信息是需要注意的。
官方公众号